HDU1003 Max Sum(DP)
2016-12-12 16:08
267 查看
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 228524 Accepted Submission(s): 53767 Problem Description Given a sequence a[1],a[2],a[3]......a , your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14. Input The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line starts with a number N(1<=N<=100000), then N integers followed(all the integers are between -1000 and 1000). Output For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line contains three integers, the Max Sum in the sequence, the start position of the sub-sequence, the end position of the sub-sequence. If there are more than one result, output the first one. Output a blank line between two cases. Sample Input 2 5 6 -1 5 4 -7 7 0 6 -1 1 -6 7 -5 Sample Output Case 1: 14 1 4 Case 2: 7 1 6
12月12日唉,那时候电脑也是在这一天买的2333. 不能对不起自己的电脑,要让它发光发热。 求最大子段和,注意初始化(-1000~1000),所以初始化的值不是0,要在-1000以下,设置为-1001就可以,注意一下格式。
#include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cctype> #include<cmath> #include<ctime> #include<string> #include<stack> #include<deque> #include<queue> #include<list> #include<set> #include<map> #include<cstdio> #include<limits.h> #define MOD 1000000007 #define fir first #define sec second #define fin freopen("/home/ostreambaba/文档/input.txt", "r", stdin) #define fout freopen("/home/ostreambaba/文档/output.txt", "w", stdout) #define mes(x, m) memset(x, m, sizeof(x)) #define Pii pair<int, int> #define Pll pair<ll, ll> #define INF 1e9+7 #define inf 0x3f3f3f3f #define Pi 4.0*atan(1.0) #define Sqrt(x) (x)*(x) #define lowbit(x) (x&(-x)) #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long ll; typedef unsigned long long ull; const double eps = 1e-12; const int maxn = 1000000+10; using namespace std; inline int read(){ int x(0),f(1); char ch=getchar(); while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } int dp[maxn]; int main() { fin; int t,n; t=read(); for(int cnt=1;cnt<=t;++cnt){ int Max=-1001,cur=0; n=read(); int st,ed,tmp; st=ed=tmp=1; for(int i=1;i<=n;++i){ dp[i]=read(); cur+=dp[i]; if(cur>Max){ Max=cur; st=tmp; ed=i; } if(cur<0){ cur=0; tmp=i+1; } } printf("Case %d:\n%d %d %d\n",cnt,Max,st,ed); if(cnt!=t){ cout<<endl; } } return 0; }
相关文章推荐
- HDU 1003 Max Sum(最大连续子序列和 经典DP)
- HDU--1003 -- Max Sum [dp]
- HDU 1003 MAX SUM 最大连续子段和DP
- Max Sum (hdu 1003 简单DP水过)
- HDU 1003 Max Sum(最大区间和,DP)
- hdu-1003(java)-Max Sum (DP)
- hdu 1003 MAX sum (简单DP)
- HDU1003- Max Sum(DP优化入门题目)
- HDU 1003:Max Sum(DP)
- hdu 1003 Max Sum 简单DP
- hdu-1003 max sum (dp,注意初始化和最后位置的确定)
- hdu 1003 Max sum(简单DP)
- DP训练 hdu 1003 Max Sum 最大连续子段和
- HDU 1003 Max Sum(dp,最大连续子序列和)
- HDU 1003 Max Sum(dp)
- hdu 1003 Max Sum - dp
- hdu 1003 Max Sum(简单DP)
- hdu 1003 Max Sum (DP)
- HDU-#1003 Max Sum(DP+区间最大子序列)
- HDU 1003 Max Sum(DP)