递归分解超时求助
查看原帖
递归分解超时求助
1365214
wgj20140401楼主2025/7/30 13:08
#include <bits/stdc++.h>
using namespace std;
int n, ans, res[10];
bool ch() ;

void dfs(int rem, int k) {
	/*rem 为当前剩余的还未被拆分的大小,k为存进数组的长度*/
	if (rem == 0) {
		if (k == 3 && ch()) {
			ans++;
		}
		return ;
	}
	for (int i = rem; i >= 1; i--) {
		if (k == 0) {
			res[k] = i;    //第一轮
			dfs(rem - i, k + 1);
		} else if (i <= res[k - 1]) { //保证前面的数字是由4依次递减到1
			res[k] = i;
			dfs(rem - i, k + 1);
		}
	}
	return ;
}

bool ch() {//0,1,2
	if (res[0] == res[1] || res[0] == res[2] || res[1] == res[2]) {
		return 0;
	}
	for (int i = 0; i < 3; i++) {
		int u = res[i];
		while (u > 0) {
			if (u % 10 == 3 || u % 10 == 7) {
				return 0;
			}
			u /= 10;
		}
	}
	return 1;
}

int main() {
	scanf("%d", &n);
	dfs(n, 0);
	printf("%d", ans);
	return 0;
}

记录传送门

2025/7/30 13:08
加载中...