卡常求条qwq
查看原帖
卡常求条qwq
126972
Kevinx楼主2023/12/15 15:54
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 12, Mod = 1e9 + 7;
int n, m, a[30], b[5];
int f[(1 << 24) + 5], mmap[(1 << 24) + 5], num[(1 << 24) + 5];
int main (){
	scanf("%d", &n); for(int j = 1; j <= n; j++) {scanf("%d", &a[j]); mmap[(1<<(j-1))] = a[j];}
	b[1] = b[2] = -1;
	scanf("%d", &m); for(int j = 1; j <= m; j++) scanf("%d", &b[j]);
	f[0] = 1;
	for(int i = 1; i < (1 << n); i++) {
		ll id = i & -i;
		ll S = num[i] = num[i ^ id] + mmap[id];
		if(S == b[1] || S == b[2]) continue;
		for(int j = i; j; j ^= id, id = (j & -j)) 
			f[i] = (f[i] + f[i ^ id]) >= Mod ? (f[i] + f[i ^ id]) - Mod : (f[i] + f[i ^ id]);
	}
	printf("%d", f[(1 << n) - 1]); 
	
	
	return 0;
}

2023/12/15 15:54
加载中...