NC20024. [HNOI2002]彩票
描述
输入描述
输入文件有且仅有一行,就是用空格分开的四个整数N,M,X,Y。
1 ≤ X, Y ≤ 100,1 ≤ N ≤ 10,1 ≤ M ≤ 50。输入数据保证输出结果不超过10^5。
输出描述
输出文件有且仅有一行,即所需准备的纪念品数量。
示例1
输入:
2 4 3 4
输出:
1
C++(clang++ 11.0.1) 解法, 执行用时: 415ms, 内存消耗: 444K, 提交时间: 2022-10-17 02:08:39
#include <iostream> using namespace std; int n, m, x, y; int ans = 0; double sum[105]; double obj; const double eps = 1e-12; void dfs(double x, int cur = 1, int f = 0) { if (f == n) { if (x >= -eps && x <= eps) { ans++; } return; } if (cur > m) return; if (x - eps > sum[min(cur + n - f - 1, m)] - sum[cur - 1]) return; if (x + eps < sum[m] - sum[m - (n - f)]) return; dfs(x, cur + 1, f); if (x + eps >= 1.0 / cur) { dfs(x - 1.0 / cur, cur + 1, f + 1); } } int main() { cin >> n >> m >> x >> y; for (int i = 1; i <= m; i++) sum[i] = sum[i - 1] + 1.0 / i; dfs((double) x / y); cout << ans << endl; return 0; }