rt.
https://www.luogu.com.cn/record/111794819
#include<bits/stdc++.h>
using namespace std;
int n,m;
int m1=-1,m2=-1;
long long a[1<<24],dp[1<<24],mod=1e9+7;
int main(){
scanf("%d",&n);
for(int i(0);i<n;i++)scanf("%d",a+(1<<i));
scanf("%d",&m);
if(m)scanf("%d",&m1);
if(m>1)scanf("%d",&m2);
if(!m1||!m2)return puts("0"),0;
dp[0]=1;
int msk=(1<<n);
for(int i(1);i<msk;i++){
int k(i),j(i&-i);
a[i]=a[i^j]+a[j];
if(a[i]==m1||a[i]==m2)continue;
for(;k;k^=j,j=(k&-k))
dp[i]=(dp[i]+dp[i^j])%mod;
}
printf("%lld",dp[msk-1]);
return 0;
}
感觉思路跟第一份题解差不多啊,但是不知道为什么慢这么多 qwq
thx.