ZhangRunqi

P1115题库链接:https://www.luogu.org/problem/P1115

难度:普及-

算法标签:动态规划,DP,递推

1.DP O(n) 得分100

由于需要求的序列是连续的,所以我们定义状态为b[i]表示某子段最大和,其状态转移方程为b[i] = max(a, b[i - 1] + a)(表示若该子段最大和 + a比单独的a大,就加上a,否则a就自己成为一个子段)。因为最大的子段和不一定在最后,所以需要输出b数组中的最大值

 1 #include <cstdio>
 2 using namespace std;
 3 int n, a[200100], b[200100], sum = -9999;
 4 int max(int a, int b)
 5 {
 6     if(a >= b) return a;
 7     else return b;
 8 }
 9 int main()
10 {
11     scanf("%d", &n);
12     for(int i = 1; i <= n; ++i)
13     {
14         scanf("%d", &a[i]);
15         b[i] = max(a[i], b[i - 1] + a[i]);
16         sum = max(sum, b[i]);
17     }
18     printf("%d", sum);
19     return 0;
20 } 

分类:

技术点:

相关文章:

  • 2021-12-11
  • 2021-06-14
  • 2022-01-19
  • 2021-10-17
  • 2021-08-11
  • 2022-01-21
猜你喜欢
  • 2021-12-27
  • 2021-07-18
  • 2021-12-05
  • 2021-07-26
  • 2022-03-03
相关资源
相似解决方案