您的位置:首页 > 其它

HDU 1003 解题报告

2014-04-04 21:45 267 查看
问题描述:求最大连续字串

分析:一道简单的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

#include<cstdio>

int a[100005],start[100005],d[100005],T;
int main()
{
scanf("%d",&T);
int t=0;
while(++t<=T)
{
printf("Case %d:\n",t);
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int point=1;
d[0]=0;
for(int i=1;i<=n;i++)
{
if(d[i-1]+a[i]>a[i])
{
d[i]=d[i-1]+a[i];
start[i]=point;
}
else
{
d[i]=a[i];
start[i]=point=i;
}
}
int max=d[1],ins=1;
for(int i=2;i<=n;i++)
{
if(d[i]>max)
{
max=d[i];ins=i;
}
}
printf("%d %d %d\n",max,start[ins],ins);
if(t<T) printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: