我没用背包的写法,我是想把每个宝石价格从大到小排列然后,用每个食物减去这个宝石价格能最后能0的就输出,排查过程就是先for一次,(食物比宝石价格高的才减)从第一个开始减减去第一个,然后减第二个依次往下到所有宝石结束。如果第一轮不行,然后就从第二个开始开始减,同理然后减第三个依次往下
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
int m[1000];
int s[1000];
int a,b;
scanf("%d",&a);
scanf("%d",&b);
//马丁
for(int q=1;q<=a;q++)
{
int c;
scanf("%d",&c);
m[q]=c;
}
//食物价格
for(int w=1;w<=b;w++)
{
int d;
scanf("%d",&d);
s[w]=d;
}
sort(m+1,m+a+1);
reverse(m+1,m+a+1);
for(int e=1;e<=b;e++)
{
int flag=0;
int jk=s[e];
for(int f=1;f<=a;f++)
{
s[e]=jk;
if(s[e]>=m[f])
{
s[e]=s[e]-m[f];
//printf("%d\n",s[e]);
if(s[e]==0){flag=1;break;}
}
for(int g=f+1;g<=a;g++)
{
if(s[e]>m[g]){s[e]=s[e]-m[g];}
else if(s[e]==m[g]){s[e]=s[e]-m[g];}
//printf("%d\n",s[e]);
if(s[e]==0){flag=1;break;}
}
if(s[e]==0){break;}
}
if(flag==1){printf("yes\n");}
else{printf("no\n");}
}
}
}
现在自己测了很多数据都对但是wa,我想知道问题出现在哪