题意:给你n个数(n<2000)q(q<10000)个询问s,求n个数是否能取任意个数相加得到s
题解:一开始以为是数论写半天。。。可以把这些数分类,分成a[1]类,每一类的数可以由最小的数加上t个a[1]得到,
初始得到的数只能是0,每个点到0的距离为无穷大,每次更新最短路,SPFA跑的更快一点
#include#define maxn 100010using namespace std;int dis[maxn], n, a[maxn];void bfs(int fi){ memset(dis, 63, sizeof(dis)); dis[0] = 0; queue q; q.push(fi); while(!q.empty()){ fi = q.front(); q.pop(); for(int i=1;i >n; for(int i=0;i >a[i]; bfs(0); cin>>q; while(q--){ cin>>m; cout<<((dis[(m)%a[0]]<=m)?"YES":"NO")<