码迷,mamicode.com
首页 > 其他好文 > 详细

HDU_1003Max Sum 简单动归

时间:2014-11-03 19:19:44      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   os   for   sp   

以前做过这道题目,那是还不懂状态方程。乱搞一气:

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=5000+10;
 5 int a[maxn];
 6 int main()
 7 {
 8     int  T;
 9     scanf("%d",&T);
10     for(int i=1;i<=T;i++)
11     {
12         int n;
13         scanf("%d",&n);
14         for(int j=0;j<n;j++)
15             scanf("%d",&a[j]);
16         int maxd=a[0];
17         int temp=a[0];
18         int left=0;
19         int right=0;
20         int x=0;
21         for(int j=1;j<n;j++)
22         {
23             if(temp+a[j]<a[j])
24             {
25 //                left=right=j;//刚开始这里错了,不能直接转过去,先存到x中
26                 temp=a[j];
27                 x=j;
28             }
29             else
30                 temp+=a[j];
31             if(temp>maxd)
32             {
33                 maxd=temp;
34                 left=x;
35                 right=j;
36             }
37         }
38         printf("Case %d:\n",i);
39         printf("%d %d %d\n",maxd,left+1,right+1);
40         if(i!=T);
41         printf("\n");
42     }
43 }

后来的做法:

bubuko.com,布布扣
 1 //状态方程:dp[j]=max(dp[j-1]+a[j],a[j]);
 2 //dp[0]=a[0];
 3 #include <iostream>
 4 using namespace std;
 5 int dp[100001];
 6 int a[100001];
 7 int re_start[100001];
 8 int main()
 9 {
10      int i,t;
11   cin>>t;
12   for(i=1;i<=t;i++)
13   {
14    int n,j;
15    cin>>n;
16    for(j=0;j<n;j++)
17     cin>>a[j];
18    dp[0]=a[0];
19    re_start[0]=0;
20    for(j=1;j<n;j++)
21    {
22            if(dp[j-1]+a[j]>=a[j])
23      {
24       dp[j]=dp[j-1]+a[j];
25       re_start[j]=re_start[j-1];
26      }
27      else
28      {
29       dp[j]=a[j];
30       re_start[j]=j;
31      }
32    }
33    int d=dp[0];
34    for(j=0;j<n;j++)
35     if(dp[j]>d)
36      d=dp[j];
37     printf("Case %d:\n",i);
38     for(j=0;j<n;j++)
39      if(d==dp[j])
40      {
41       printf("%d %d %d\n",d,re_start[j]+1,j+1);
42       break;
43      }
44      if(i!=t)
45       printf("\n"); 
46   }
47   return 0;
48 }
View Code

 

HDU_1003Max Sum 简单动归

标签:style   blog   http   io   color   ar   os   for   sp   

原文地址:http://www.cnblogs.com/wpnan/p/4071887.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!