最大连续子序列和
来源:互联网 发布:西游降魔篇 知乎 编辑:程序博客网 时间:2024/04/18 22:14
http://acm.hdu.edu.cn/showproblem.php?pid=1231
hd1231.
最大连续子序列和,
状态是 dp[i] = max(a[i], dp[i-1] + a[i])
以i结尾的最大和.
然后直接找dp[i]最大的.
其中s[i]是dp[i]中起点.
最后st来存s[i],end来存结尾.
#include<iostream>using namespace std;int main(){int n;int max=1,st,end;while(cin>>n){if(n==0)break;int f[10009],s[10009],a[10009];bool flag=0;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n;i++){if(a[i]>=0)flag=1;}if(flag){f[1]=a[1];s[1]=1;for(int i=2;i<=n;i++){if(f[i-1]+a[i]>=a[i]){f[i]=f[i-1]+a[i];s[i]=s[i-1];}else{f[i]=a[i];s[i]=i;}}max=-1;for(int i=1;i<=n;i++){if(max<f[i]){max=f[i];st=s[i];end=i;}}cout<<max<<" "<<a[st]<<" "<<a[end]<<endl;}elsecout<<0<<" "<<a[1]<<" "<<a[n]<<endl;}}
不知道为何wa
<pre name="code" class="cpp">#include<iostream>using namespace std;int a[10009];int f[1009];int s[1009];//记录最大连续和的int main(){ //freopen("in.txt","r",stdin); int n; while(cin>>n) { if(n==0) break; bool flag; flag=0; for(int i=1;i<=n;i++) { cin>>a[i]; if(a[i]>=0) flag=1;//判断是否为全负; } if(flag)//不为全负; { f[1]=a[1]; s[1]=1; for(int i=2;i<=n;i++) { if(f[i-1]+a[i]>=a[i])//也就是说加上a[i]会更大 { f[i]=f[i-1]+a[i]; s[i]=s[i-1];//起始点不变. } else { f[i]=a[i]; s[i]=i;//也就是重新开始. } } //这里记录完成,找到以a[i]结尾的最大连续子序列和.下面开始寻找最大,和路径. //for(int i=1;i<=n;i++) //cout<<f[i]<<" ";//以i为结尾的最大连续子序列 // cout<<endl; int max=f[1]; int st=1; int end=1; for(int i=2;i<=n;i++) { if(f[i]>max) { max=f[i]; st=s[i];//st[i]是记录的最大和的开始. end=i; } } cout<<max<<" "<<a[st]<<" "<<a[end]<<endl; } else cout<<"0 "<<a[1]<<" "<<a[n]<<endl; }}
0 0
- 连续子序列最大和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- leetcode: Longest Palindromic Substring
- 自己封装的加密cookie相关函数
- Android之onTouchEvent和OnTouchListener中onTouch的区别
- 字典树 之 hdu 1800
- 盘点2014上半年五大最佳工业设计
- 最大连续子序列和
- iOS后台运行程序
- android api分析31 对话框
- HDOJ 1232 畅通工程 并查集
- Linux makefile 教程 非常详细,且易懂
- sigaction函数解析
- 设计模式之原型模式 c++实现以及详解
- ios-消息中心 NSNotificationCenter 的介绍
- 路中信息竞赛No.1解题报告