使用了化除为积
保留分别除数和被除数
计算时进行通分保留
初代码无剪枝,但只有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) {
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;
}