HDU 1003 解题报告

问题描述:求最大连续字串

分析:一道简单的DP,状态转移方程是d[i] = ( d[i-1]+a[i] > a[i] ) ? d[i-1]+a[i] : a[i]

         d[i]表示以第i个数字结尾的连续字串的最大值,限制条件是 d[0]=0

         题目要求找出最大连续字串的首尾序号,尾序号显然是d[i]的下标 i ,首序号用数组start[i]保存,point是保存首序号的临时量,注意point初值是1

         还有一点,最后一组数据输出完换行后不能再打印空行,否则会判 Presentation Error

 1 #include<cstdio>
 2 
 3 int a[100005],start[100005],d[100005],T;
 4 int main()
 5 {
 6     scanf("%d",&T);
 7     int t=0;
 8     while(++t<=T)
 9     {
10         printf("Case %d:
",t);
11         int n;
12         scanf("%d",&n);
13         for(int i=1;i<=n;i++)
14             scanf("%d",&a[i]);
15         int point=1;
16         d[0]=0;
17         for(int i=1;i<=n;i++)
18         {
19             if(d[i-1]+a[i]>a[i])
20             {
21                 d[i]=d[i-1]+a[i];
22                 start[i]=point;
23             }
24             else
25             {
26                 d[i]=a[i];
27                 start[i]=point=i;
28             }
29         }
30         int max=d[1],ins=1;
31         for(int i=2;i<=n;i++)
32         {
33             if(d[i]>max)
34             {
35                 max=d[i];ins=i;
36             }
37         }
38         printf("%d %d %d
",max,start[ins],ins);
39         if(t<T) printf("
");
40     }
41 }
原文地址:https://www.cnblogs.com/sage-blog/p/3646252.html