int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int jk1[100001];
int jk2[100001];
int f=0;
int m,z;//m次数,z能力值
scanf("%d%d",&m,&z);
//过滤储存数据
for(int i2=1;i2<=m;i2++)
{
int a;
scanf("%d",&a);
if(a<=z){f++;jk1[f]=a;jk2[f]=a;}
}
int f2=f;//继承
int pan;
for(int i3=1;i3<=f2;i3++)
{
pan=z;//能力值重置
pan=pan-jk1[i3];//继承后从每一位进行计算
//cout<<pan<<endl;
int tpan=0;
for(int i4=i3+1;i4<=f2;i4++)
{
pan=pan-jk2[i4];
// int flag=0;
cout<<pan<<endl;
if(pan<0){pan=pan+jk2[i4];break;}
else if(pan==0){break;}
if(i4==f2&&pan!=0){tpan++;i4=i3+tpan-1;pan=z-jk1[i3];}
}
if(pan==0){break;}
}
if(pan==0){printf("YES\n");}
else if(pan!=0){printf("NO\n");}
}
}
用了贪心的写法