dfs(洛谷上15pts,ccf上抱灵)
查看原帖
dfs(洛谷上15pts,ccf上抱灵)
393407
Tommy_Keen楼主2021/11/30 14:44

code:

#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
const int M = 110;
const int N = 40;
int n,m,k,v[M],a[N],ans;
inline bool check() {
	unsigned long long S = 0;
	for(int i = 1; i <= n; ++i) S += (1 << a[i]);
	return (__builtin_popcount(S) <= k);
}
void dfs(int now,int val) {
	if(now >= n) {
		if(check()) ans = 1ll*(ans+val)%mod;
		return;
	}
	for(int i = 0; i <= m; ++i) {
		a[now+1] = i;
		dfs(now+1,1ll*val*v[a[now+1]]%mod);
		a[now+1] = 0;
	}
}
int main() {
//	freopen("sequence.in","r",stdin);
//	freopen("sequence.out","w",stdout);
	scanf("%d%d%d",&n,&m,&k);
	for(int i = 0; i <= m; ++i) scanf("%d",&v[i]);
	dfs(0,1);
	printf("%d\n",ans);
	return 0;
}

要不要申诉qwq

2021/11/30 14:44
加载中...