HDU 1422 重温世界杯 解题报告
2011-04-06 11:22
274 查看
重温世界杯
问题模型
环形序列的最长非负连续子序列。
解题报告
最大连续子序列问题的变形。定义f[i]表示当旅行到城市i时能够旅行的城市数目。显然当前剩余为 非负时f[i]=f[i-1]+1;否则,f[i]=0;动态地记录已经获得的最优解。
问题模型
环形序列的最长非负连续子序列。
解题报告
最大连续子序列问题的变形。定义f[i]表示当旅行到城市i时能够旅行的城市数目。显然当前剩余为 非负时f[i]=f[i-1]+1;否则,f[i]=0;动态地记录已经获得的最优解。
//线性时间求解最长连续子序列长度(要求:连续子序列和不能为负值) #include<iostream> #include<cstdio> #define Max 200100 using namespace std; int f[Max],a[Max]; int main(){ int n,s,t; while(cin>>n){ for(int i=1;i<=n;i++){ scanf("%d%d",&s,&t); a[i]=s-t; } for(int i=1;i<=n;i++) //预处理,便于操作 a[i+n]=a[i]; int pre=0,cnt=0,s=0; //pre为当前剩余的钱数 cnt记录最优值 s记录每次出发的起点 f[0]=0; for(int i=1;i<=2*n;i++){ if(pre+a[i]>=0){ pre+=a[i]; f[i]=f[i-1]+1; if(i-s==n){ //这里是一个优化 if(f[i]>cnt) cnt=f[i]; break; } } else{ s=i;pre=0;//更新起点和当前剩余钱数 f[i]=0; if(f[i-1]>cnt) cnt=f[i-1];//更新记录最有值 } } printf("%d/n",cnt); } return 0; }
相关文章推荐
- hdu 1422 - 重温世界杯(解题报告)
- HDU-1422 重温世界杯 ACM解题报告(贪心)
- HDU 1422 重温世界杯--(最长子序列模型,bug)
- HDU 1422 重温世界杯
- HDU 1422 重温世界杯【最长非负连续子序列】
- HDU-1422 -重温世界杯 - 环上的最长连续子序列
- HDU 1422 重温世界杯
- HDU 1422 重温世界杯 DP+最长正子段长度 *
- hdu 1422 重温世界杯(DP 最长非负子序列)
- hdu 1422 重温世界杯
- hdu 1422 重温世界杯(动态规划)
- HDU 1422 重温世界杯(最长非负子序列)
- hdu 1422 重温世界杯
- HDU - 1422 重温世界杯
- hdu 1422 重温世界杯(DP 最长非负子序列)
- HDU 1422 重温世界杯 基础DP 好题
- hdu1422 重温世界杯(DP)
- hdu 1422 重温世界杯
- hdu 1422 重温世界杯 dp
- hdu 1422 重温世界杯(dp)