您的位置:首页 > 其它

51nodLearning-dp入门之循环数组的最大子段和

2016-04-23 19:58 399 查看
思路:51nod上很详细,我就不讲了

直接上代码:

/*我的断点就去最后的那个,方便求普通的最大子段和
#include <stdio.h>
#include <cstring>
#include <algorithm>
#define FIN freopen("input.txt","r",stdin)
using namespace std;
typedef long long ll;
const int MAX=50005;
int n;
ll a[MAX],c[MAX];
int main(){
//FIN;
while(~scanf("%d",&n)){
ll sum=0;
for(int j=0;j<n;j++){
scanf("%I64d",&a[j]);
sum+=a[j];
}
ll res=0,ans=0,res1=0,ans1=0;//ans为普通的最大字段和,ans1为普通最小子段和
for(int i=0;i<n;i++){
if(res>0) res+=a[i];
else res=a[i];
if(res>ans) ans=res;
if(res1<=0) res1+=a[i];
else res1=a[i];
if(res1<ans1) ans1=res1;
}

printf("%I64d\n",max(ans,sum-ans1));//输出这个是51nod上的标式
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: