HDU 1231 最大连续子序列(dp)
来源:互联网 发布:科荣纺织软件 编辑:程序博客网 时间:2024/05/16 17:29
状态方程f[i]表示0~i最长子序列长度。
状态转移f[i]=max(f[i],f[i-1]+d[i])。
//// main.cpp// Richard//// Created by 邵金杰 on 16/9/8.// Copyright © 2016年 邵金杰. All rights reserved.//#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=10000+100;int f[maxn];struct node{ int begin,end; node(int b=0,int e=0): begin(b),end(e) {}}state[maxn];int d[maxn];int main(){ int n; int pos=0; while(scanf("%d",&n)&&n) { int cnt=0,flag=-1; memset(f,0,sizeof(f)); for(int i=0;i<n;i++){ scanf("%d",&d[i]); if(d[i]==0) flag=i; if(d[i]>0) {cnt++;f[i]=d[i];} else f[i]=0; } if(cnt>0) { int MAX=f[0]; pos=0; for(int i=0;i<n;i++) state[i]=node(i,i); for(int i=1;i<n;i++) { if(f[i]<f[i-1]+d[i]) { f[i]=f[i-1]+d[i]; state[i]=node(state[i-1].begin,i); if(f[i]>MAX) {MAX=f[i];pos=i;} } } cout<<f[pos]<<" "<<d[state[pos].begin]<<" "<<d[state[pos].end]<<endl; } else { if(flag!=-1) cout<<"0 0 0"<<endl; else cout<<"0"<<" "<<d[0]<<" "<<d[n-1]<<endl; } } return 0;}
0 0
- hdu 1231 最大连续子序列(DP)
- HDU 1231 最大连续子序列 (dp)
- hdu 1231最大连续子序列 【DP】
- hdu 1231 最大连续子序列 (dp)
- HDU 1231 最大连续子序列(dp)
- 最大连续子序列 - HDU 1231 dp
- hdu 1231 最大连续子序列 DP
- hdu 1231 最大连续子序列(dp)
- HDU-1231-最大连续子序列【dp】
- hdu 1231 最大连续子序列 DP
- HDU 1231 最大连续子序列(DP)
- HDU-1231-最大连续子序列【DP】
- HDU 1231 最大连续子序列【dp】
- HDU 1231 最大连续子序列 DP .
- hdu 1231 dp 最大连续子序列
- 最大连续子序列 (dp)HDU 1231
- HDU 1231 最大连续子序列 (DP)
- hdu 1231 最大连续子序列(dp)
- Dalvik虚拟机进程和线程的创建过程分析
- opencv2笔记01-注意事项
- PAT 1040. Longest Symmetric String (25)(最大对称长度)
- Android 创建debugkeystore
- maven配置文件中修改默认jdk
- HDU 1231 最大连续子序列(dp)
- 几种在shell命令行中过滤adb logcat输出的方法
- Html.RenderPartial与 Html.RenderAction的区别
- Android的top命令
- Git中三种文件状态及其转换
- Java垃圾回收GC(Garbage Collection)
- QT开发学习资料(1)
- 使用CADisplayLink简单的实现倒计时
- 二、Linux设备模型(2)_Kobject