标签:nbsp 独立 color 雨燕 namespace 更新 span size eof
题意:给你n个数(n<2000)q(q<10000)个询问s,求n个数是否能取任意个数相加得到s
题解:一开始以为是数论写半天。。。可以把这些数分类,分成a[1]类,每一类的数可以由最小的数加上t个a[1]得到,
初始得到的数只能是0,每个点到0的距离为无穷大,每次更新最短路,SPFA跑的更快一点
#include <bits/stdc++.h> #define maxn 100010 using namespace std; int dis[maxn], n, a[maxn]; void bfs(int fi){ memset(dis, 63, sizeof(dis)); dis[0] = 0; queue<int >q; q.push(fi); while(!q.empty()){ fi = q.front(); q.pop(); for(int i=1;i<n;i++){ if(dis[fi]+a[i]<dis[(fi+a[i])%a[0]]){ dis[(fi+a[i])%a[0]] = dis[fi]+a[i]; //dir[(fi+a[i])%a[0]] = 1; q.push((fi+a[i])%a[0]); } } } } int main() { int m, q; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; bfs(0); cin>>q; while(q--){ cin>>m; cout<<((dis[(m)%a[0]]<=m)?"YES":"NO")<<endl; } return 0; }
UESTC 1634 去年春恨却来时,落花人独立,微雨燕双飞
标签:nbsp 独立 color 雨燕 namespace 更新 span size eof
原文地址:http://www.cnblogs.com/Noevon/p/7162662.html