在这场无数人AK的比赛中,本人自测250分,但不能平的是,我为什么要白白写二进制优化啊?你聪明的,告诉我,我的时间复杂度是多少。
#include<bits/stdc++.h>
using namespace std;
bitset<500010>f;
template<typename T>void read(T &cn)
{
char c;int sig = 1;
while(!isdigit(c = getchar())) if(c == '-') sig = -1; cn = c-48;
while(isdigit(c = getchar())) cn = cn*10+c-48; cn*=sig;
}
int main()
{
//freopen("watch.in","r",stdin);
//freopen("watch.out","w",stdout);
f[0]=1;
int n,m;
read(n);
read(m);
for(register int i=1;i<=n;++i)
{
int k,a;
read(k);
read(a);
int t=1;
while(a>=t)
{
int tt=500005-t*k;
for(register int j=tt;j>=0;--j)
if(f[j])
f[j+t*k]=1;
a-=t;
t<<=1;
}
}
for(register int i=1;i<=m;++i)
{
int t;
read(t);
if(f[t])
puts("Yes");
else
puts("No");
}
return 0;
}