标签:
题目地址 http://nanti.jisuanke.com/t/21
就是求最大子串和,不过通常当最大和 < 0 时,题目要求将最大和置为 0 ,这道题则要求求最大和(可以为负值)
经典的动态规划算法,没有办法处理全是负数的情况。所以只需多加一个变量记录序列的最大值即可。
# include <stdio.h>
# include <iostream>
using namespace std;
int ans[1010];
int main(){
int t;
scanf("%d", &t);
for(int i=0; i<t; ++i){
scanf("%d" ,&ans[i]);
}
//输入数据
int thissum = 0, sum = 0, ele = ans[0]; //注意这几个变量的初始值
for(int i=0; i<t; ++i){
thissum += ans[i];
if(thissum > sum){
sum = thissum;
}
if(thissum < 0){
thissum = 0;
}
//动态规划部分
if(ans[i] > ele){
ele = ans[i];
}
//求最大的元素
}
int res = 0;
if(sum == 0){
res = ele;
//全是负数的情况
}else{
res = sum > ele ? sum : ele;
}
cout << res << endl;
return 0;
}
标签:
原文地址:http://www.cnblogs.com/zzusunjs/p/5479164.html