DP 水题 HDU1003

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 long long dp[100010];
 8 int start[100010];
 9 int arr[100010];
10 
11 int main()
12 {
13     int T;
14     scanf("%d",&T);
15     for(int l=1;l<=T;l++)
16     {
17         if(l>1)
18             cout<<endl;
19         int n;
20         scanf("%d",&n);
21         for(int i=1;i<=n;i++)
22             scanf("%d",&arr[i]);
23         for(int i=1;i<=n;i++)
24             start[i]=i;
25         memset(dp,0,sizeof(dp));
26         for(int i=1;i<=n;i++)
27         {
28             if(dp[i-1]+arr[i]>(long long)arr[i])
29             {
30                 start[i]=start[i-1];
31                 dp[i]=dp[i-1]+arr[i];
32             }
33             else
34                 dp[i]=arr[i];
35         }
36         long long ans=-(1<<29);
37         int se=0;
38         for(int i=1;i<=n;i++)
39         {
40             if(dp[i]>ans)
41             {
42                 se=i;
43                 ans=dp[i];
44             }
45         }
46         cout<<"Case "<<l<<":"<<endl;
47         cout<<ans<<" "<<start[se]<<" "<<se<<endl;
48     }
49     return 0;
50 }
View Code

 

posted @ 2015-09-01 20:22  相儒以沫  阅读(126)  评论(0编辑  收藏  举报