求调(ONLy10pts,其它WA)
查看原帖
求调(ONLy10pts,其它WA)
1260548
StevenYan楼主2024/12/24 18:05

使用了化除为积
保留分别除数和被除数 计算时进行通分保留 初代码无剪枝,但只有WA和最水的一个测试点的AC 感觉是dfs的问题,没有搜到答案(完全不剪枝都没有TLE)
自查感觉没什么问题,自造几个简单数据也没有问题,求神犇解答
代码如下

#include <bits/stdc++.h>
using namespace std;
#define int long long
int x, y, n, m, ans = 0, a[55] = {0}, b[55] = {0};

void dfs(int dep, int maxn, int now1, int now2) {/*
	dep表示搜索的第几个数字
	maxn表示当前搜到了1~M的第几个数字(组合剪枝)
	now1是分子,now2是分母
*/
	if (dep == n && now1 * y == now2 * x) {
		ans += 1;
		return;
	} else {
		for (int i = maxn + 1; i <= m; i++) {
			int tmp1 = now1 * a[i] + now2;//分子求和
			int tmp2 = now2 * a[i];//分母通分
			if (tmp1 * y <= tmp2 * x && dep < n) {
				dfs(dep + 1, i, tmp1, tmp2);
			}
		}
	}
}

signed main() {
#ifndef ONLINE_JIDGE
	freopen("inn.txt", "r", stdin);
#endif
	cin >> n >> m >> x >> y;
	for (int i = 1; i <= m; i++) {
		a[i] = i;
	}
	dfs(0, 1, 0, 1);
	cout << ans;
	return 0;
}
2024/12/24 18:05
加载中...