持续更新中…
题目:A - Max Sum
题解:
arr[maxn]是存放数据;
dp[maxn]是动态存放arr[maxn]从第i个值及之后相加的和;
(输出:最大的和,开始的地址,结束的地址)
#include<cstdio>
#include<cstring>
#define maxn 100010
const int INF = -1e4;
int arr[maxn];
int dp[maxn];
int cas = 1;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int maxnum = INF,start = 0,endnum = 0;
int first = 0,last = 0;
int n;
scanf("%d",&n);
memset(arr,0,sizeof(arr));
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
dp[0] = arr[0];
for(int i=0;i<n;i++)
{
if(dp[i-1] + arr[i] >= arr[i])
{
dp[i] = dp[i-1] + arr[i];
endnum = i;
}
else
{
dp[i] = arr[i];
start = i;
endnum = i;
}
if(dp[i] > maxnum)
{
maxnum = dp[i];
first = start;
last = endnum;
}
}
printf("Case %d:\n",cas++);
printf("%d %d %d\n",maxnum,first+1,last+1);
if(t != 0) //注意题目的描述
{
printf("\n");
}
}
return 0;
}