题解 P2396 【yyy loves Maths VII】
题目链接:Luogu 2396
yyy 有
数据范围:
Solution
我们首先可以确定这是一道
我们定义
时间复杂度:
Code
#include <cstdio>
const int N=24;
const int mod=1e9+7;
int n,m,b1,b2,dis[1<<N],f[1<<N];
void upd(int &x,int y) {(x+=y)>=mod&&(x-=mod);}
void solve(int x) {
for(int i=x,j;i;i^=j) j=i&-i,upd(f[x],f[x^j]);
}
int main() {
scanf("%d",&n);
for(int i=0;i<n;++i) scanf("%d",&dis[1<<i]);
scanf("%d",&m);
if(m>0) scanf("%d",&b1);
if(m>1) scanf("%d",&b2);
f[0]=1;
int msk=(1<<n)-1;
for(int i=1;i<=msk;++i) {
int j=i&-i;
dis[i]=dis[i^j]+dis[j];
if(dis[i]==b1||dis[i]==b2) continue;
solve(i);
}
printf("%d\n",f[msk]);
return 0;
}