第18个测试点错误求调试,代码如下:
#include<iostream>
#include<cmath>
#include<cstring>
typedef long long ll;
using namespace std;
int T,n;
ll f[100005][330],a[100005],qzh[100005];
int main()
{
// freopen("新建文本文档 (2).txt","w",stdout);
scanf("%d",&T);
while(T--)
{
// memset(f,0,sizeof(f));
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
qzh[i]=qzh[i-1]+a[i];
f[i][0]=0x3f3f3f3f3f3f3f3f;
// f[i][1]=a[i];//
}
f[n][1]=a[n];
for(int i=n-1;i>=1;i--)
{
f[i][1]=max(f[i+1][1],a[i]);
}
for(int i=n;i>=1;i--)
{
for(int j=2;i+j*(j+1)/2-1<=n;j++)
{
f[i][j]=0;
if(i+1<=n&&i+j*(j+1)/2<=n)f[i][j]=f[i+1][j];
if(i+j<=n&&qzh[i+j-1]-qzh[i-1]<f[i+j][j-1])f[i][j]=max(f[i][j],qzh[i+j-1]-qzh[i-1]);
}
}
// for(int i=1;i<=n;i++)
// {
// for(int j=1;j<=3;j++)
// {
// printf("f[%d][%d]=%lld ",i,j,f[i][j]);
// }
// cout<<'\n';
// }
int ans=0;
for(int i=1;i*(i+1)/2<=n;i++)
{
if(f[1][i]>0){
ans=i;
}
}
printf("%d\n",ans);
}
return 0;
}