http://acm.hdu.edu.cn/showproblem.php?pid=1003
这个是最大字段和问题,具体用DP来解决,其中,动态转移方程为:dp[i] = max(dp[i-1]+a[i],a[i])
#include <stdio.h>
int a[100010];
int main(void)
{
int n,m,k = 1,i,pos,start,end;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
for(i = 1; i <= m; i++)
{
scanf("%d",&a[i]);
}
int s = 0,max = a[1];
pos = start = end = 1;
for(i = 1; i <= m; i++)
{
if(s < 0)
{
s = a[i];
pos = i;
}
else
s += a[i];
if(max < s)
{
max = s;
start = pos;
end = i;
}
}
printf("Case %d:\n%d %d %d\n",k++,max,start,end);
if(n > 0)
printf("\n");
}
return 0;
}
本文介绍了一个经典的动态规划问题——最大字段和问题,并提供了一段C语言实现的代码示例。通过动态转移方程 dp[i]=max(dp[i-1]+a[i], a[i]) 实现了对输入序列的最大子段和的计算。
173

被折叠的 条评论
为什么被折叠?



