数据有待加强
查看原帖
数据有待加强
294316
无敌联盟楼主2022/1/5 13:56

洛谷可以过的,但是牛客只能过90%样例

牛客链接:https://ac.nowcoder.com/acm/problem/20240

本人代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
vector<int> vec;
int sum[1 << 15];
int f[20][20][1 << 15];
int n, m;
int getsum(int x) {
	int cnt = 0;
	while(x) {
		cnt += x & 1;
		x >>= 1;
	}
	return cnt;
}
signed main() {
	cin >> n >> m;
	for(int i = 0; i < 1 << n; i++) {
		sum[i] = getsum(i);
		if( (i & (i << 1)) or (i & (i >> 1)) or sum[i] > m) continue;
		vec.push_back(i);
	}
	for(auto i : vec) {
		f[0][sum[i]][i] = 1; 
	}
	for(int i = 1; i < n; i++) {
		for(auto j : vec) {
			for(auto k : vec) {
				if(j & k) continue;
				if(j & (k << 1)) continue;
				if(j & (k >> 1)) continue;
				for(int s = m; s >= sum[j]; s--) {
					f[i][s][j] += f[i - 1][s - sum[j]][k];
				}
			}
		}
	}
	int ans = 0;
	for(auto i : vec) {
		ans += f[n - 1][m][i]; 
	}
	cout << ans << endl; 
	return 0;
}
2022/1/5 13:56
加载中...