hdu1003 dp

时间:2021-11-20 19:18:42

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1003

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int t,n,k,x=,a[],dp[],flag=;
int main()
{
scanf("%d",&t);
while(t--)
{
if(flag++!=) printf("\n");
scanf("%d",&n);
for(int i=; i<=n; i++)
scanf("%d",&a[i]);
int max=-;
memset(dp,,sizeof(dp));
dp[]=a[];
for(int i=; i<=n; i++)
dp[i]=dp[i-]+a[i]>a[i] ? dp[i-]+a[i] : a[i];
for(int i=; i<=n; i++)
{
if(dp[i]>max)
{
max=dp[i];
k=i;
}
}
int sum=,p=;
for(int i=k; i>=; i--)
{
sum+=a[i];
if(sum==max) p=i;
}
printf("Case %d:\n%d %d %d\n",++x,max,p,k);
}
return ;
}