杭电 1003 Max Sum (动态规划)

参考:https://www.cnblogs.com/yexiaozi/p/5749338.html

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 const int N=1e5+10;
 6 int a[N],dp[N];
 7 int n;
 8 void test()
 9 {
10     cout<<"\n---------\n";
11     for (int i=0;i<=n;i++)
12     {
13         cout<<'['<<a[i]<<']';
14     }
15     cout<<endl;
16     for (int i=0;i<=n;i++)
17     {
18         cout<<'['<<dp[i]<<']';
19     }
20     cout<<"\n------------\n";
21 }
22 int main()
23 {
24     int t;
25 //    freopen("btext.txt","r",stdin);
26     while (cin>>t)
27     {
28         for (int ca=1;ca<=t;ca++)
29         {
30             cin>>n;
31             int ans=-N,s,e;
32             memset(a,0,sizeof(a));
33             memset(dp,0,sizeof(dp));
34             for (int i=1;i<=n;i++)
35             {
36                 cin>>a[i];
37                 dp[i]=max(dp[i-1]+a[i],a[i]);
38 //                test();
39                 if (dp[i]>ans)
40                 {
41                     ans=dp[i];
42                     e=i;
43                 }
44             }
45             int sum=0;
46             for (int i=e;i>=1;i--)
47             {
48                 sum+=a[i];
49                 if (sum==ans)//要求第一个例子,所以不能break!
50                 {
51                     s=i;
52                 }
53             }
54             cout<<"Case "<<ca<<':'<<endl;
55             cout<<ans<<' '<<s<<' '<<e<<endl;
56             if (ca!=t)//注意格式!
57             {
58                 cout<<endl;
59             }
60         }
61     }
62 
63     return 0;
64 }

 

posted @ 2018-08-07 15:04  hemeiwolong  阅读(88)  评论(0编辑  收藏  举报