HDU 1003 Max Sum 最大子段和dp解题
来源:互联网 发布:matlab caffe win7 编辑:程序博客网 时间:2024/05/29 11:01
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003
题意:给定一个数组,求最大的连续的一段和值(最大子段和)。
Dp思路:用dp[i]表示以i结尾的最大最大子段和,则状态转移方程为:dp[i]=max(dp[i-1]+A[i],A[i]),这个很好理解。做了这题就可以做HDU1024的升级版最大子段和了。遗憾的是,我居然反过来了,导致HDU1024想了很久。
代码:
#include<iostream>#include<cstdio>#define maxn 100010#define INF 0x7fffffffusing namespace std;int A[maxn],dp[maxn],L[maxn],R[maxn];//L和R分别记录左起点和右起点int N;int main(){ //freopen("in.txt","r",stdin); int T;cin>>T; for(int kase=1;kase<=T;kase++){ cin>>N; for(int i=0;i<N;i++) scanf("%d",A+i); dp[0]=A[0];L[0]=R[0]=0; for(int i=1;i<N;i++){ if(dp[i-1]<0) L[i]=R[i]=i,dp[i]=A[i]; else L[i]=L[i-1],R[i]=i,dp[i]=dp[i-1]+A[i]; } int l,r,Max=-INF; for(int i=0;i<N;i++) if(dp[i]>Max) Max=dp[i],l=L[i],r=R[i]; printf("Case %d:\n%d %d %d\n",kase,Max,l+1,r+1); if(kase<T) printf("\n"); } return 0;}
0 0
- HDU 1003 Max Sum 最大子段和dp解题
- HDU 1003 MAX SUM 最大连续子段和DP
- DP训练 hdu 1003 Max Sum 最大连续子段和
- HDU-1003 Max Sum(最大连续子段和)
- HDU 1003 Max Sum(最大连续子段和)
- HDU 1003 Max Sum(dp,最大连续子序列和)
- HDU 1003 Max Sum(dp,最大连续子序列和)
- 【最大连续子序列和dp】hdu 1003 Max Sum
- Max Sum Plus Plus 最大子段和 经典 Dp
- HDU1003 Max Sum【最大子段和+DP】
- DP动态规划--最大子段和--Max Sum
- hdu 1024 Max Sum Plus Plus(dp && 最大m子段和)
- HDU 1024 Max Sum Plus Plus[dp](最大m子段和)
- HDU 1024 Max Sum Plus Plus(dp最大m子段和)
- HDU 1024 Max Sum Plus Plus【DP,最大m子段和】
- hdu 1024 最大M子段和 Max Sum Plus Plus(dp)(中等难度)
- HDU 1024 Max Sum Plus Plus(dp多段最大子序列和)*
- Max Sum hdu1003 最大子段和
- Excel Sheet Column Number
- C# 动态链接库
- 乐讯机器人-刷回复精简版【使用说明】
- Unique Paths II - LeetCode 63
- 【Android应用开发技术:用户界面】AdapterView
- HDU 1003 Max Sum 最大子段和dp解题
- P122.16
- 2-15
- (scan):STL-------------partial_sum
- 【Android应用开发技术:用户界面】ProgressBar
- Factorial Trailing Zeroes
- C语言预处理指令:宏、条件编译、文件包含
- 【Android应用开发技术:用户界面】ViewAnimator
- $_SERVER详解