分析:给你n个数字,和一个p,让你改变n个数中的一个数为p,使得最长连续子序列之和最大。因为n不大,<=1000,所以可以暴力求,让每个数字都变换一次然后求最大值。
# include <stdio.h>
__int64 MAX(int n,int a[1005])
{
__int64 i,sum=0,ans=-1e9;
for(i=0;i<n;i++)
{
sum+=a[i];
if(sum>ans)
ans=sum;
if(sum<0)
sum=0;
}
return ans;
}
int main()
{
int i,n,p,T,t,a[1005];
__int64 ans,s;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&p);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0,ans=-1e9;i<n;i++)
{
t=a[i];
a[i]=p;
s=MAX(n,a);
ans=s>ans?s:ans;
a[i]=t;
}
printf("%I64d\n",ans);
}
return 0;
}