hdu 1003 Max Sum

这就是一道简单的DP题,唯一的麻烦在于他要求输出起始点和终止点,用一个数组来存放起始点就OK了。

代码:

 1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int main()
5 {
6 int a[100010],f[100010];
7 int t,n,i,j,m,x,y;
8 scanf("%d",&t);
9 for(i=1;i<=t;i++)
10 {
11 scanf("%d",&n);
12 for(j=1;j<=n;j++)
13 scanf("%d",&a[j]);
14 f[1]=1;
15 for(j=2;j<=n;j++)
16 {
17 if(a[j-1]+a[j]>=a[j])
18 {
19 a[j]=a[j-1]+a[j];
20 f[j]=f[j-1];
21 }
22 else
23 {
24 f[j]=j;
25 }
26 }
27 m=a[1];x=y=1;
28 for(j=1;j<=n;j++)
29 {
30 if(a[j]>=m)
31 {
32 m=a[j];
33 y=j;
34 x=f[j];
35 }
36 }
37 printf("Case %d:\n",i);
38 printf("%d %d %d\n",m,x,y);
39 if(i!=t)
40 printf("\n");
41 }
42 return 0;
43 }

 

posted @ 2011-11-30 21:34  Misty_1  阅读(176)  评论(0编辑  收藏  举报