#include <iostream>
#include <cstdio>
#include <map>
#include <cstring>
using namespace std;
typedef long long ll;
ll n,m;
ll a[205],k[205],t[100010];
map <ll,int> book;
void dfs(ll index,ll sum)
{
if(sum>500000) return;
if(index==n+1) return;
ll w;
for(ll i=0;i<=a[index];i++)
{
w=sum+i*k[index];
if(!book[w])
{
book[w]=1;
dfs(index+1,w);
}
}
}
int main()
{
//freopen("watch.in","r",stdin);
//freopen("watch.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d %d",&k[i],&a[i]);
dfs(1,0);
for(int i=1;i<=m;i++)
{
scanf("%d",&t[i]);
if(book[t[i]]) puts("Yes");
else puts("No");
}
return 0;
}
大家好,我觉得这个代码应该可以过几个点的,可是全部都会WA,故求助,望解答,谢谢。