0
点赞
收藏
分享

微信扫一扫

A1007 Maximum Subsequence Sum (25 分| 动态规划,附详细注释,逻辑分析)


写在前面

  • 思路分析
  • 求最大连续子序列和,输出最大和以及这个子序列开始值和结束值。
  • 如果所有数都小于0,最⼤和为0,输出首尾元素
  • sum最大和, tmp临时最大和, linx和rinx为子序列下标,tinx标记left临时下标
  • ​tmp = tmp + v[i]​​,当tmp比sum大,更新sum值、 linx和rinx的值
  • 当tmp < 0,那么后面不管来什么值,都舍弃tmp < 0前面的内容
  • 负数对于只可能拉低总和,不可能增加总和
  • 舍弃后,令tmp = 0,更新left临时值tinx
  • 学习ing

测试用例

input:
10
-10 1 2 3 4 -5 -23 3 7 -21

output:
10 1 4

2 -1 0 应输出 0 0 0

1 0 应输出 0 0 0

2 -1 -2 应输出0 -1 -2

ac代码

#include <iostream>
#include <vector>
using namespace std;

int main()
{
int n;
scanf("%d", &n);

vector<int> v(n);
int linx=0, rinx=n-1, sum=-1, tmp=0, tinx=0;

for(int i=0; i<n; i++)
{

scanf("%d", &v[i]);
tmp+=v[i];
if(tmp<0)
{
tmp =0;
tinx = i+1;
}
else if(tmp>sum)
{
sum = tmp;
linx = tinx;
rinx = i;
}
}

if(sum < 0) sum = 0;
printf("%d %d %d",sum, v[linx], v[rinx]);
return 0;
}

知识点小结

  • 动态规划(​​dynamic programming,DP​​)
  • 对每个输入元素进行探测,是1个子过程,每1个子过程都判断是否能得到符合要求的序列,得到最优解,这是一种动态规划的思想。
  • 样例解释
  • A1007 Maximum Subsequence Sum (25 分| 动态规划,附详细注释,逻辑分析)_最优解


举报

相关推荐

0 条评论