| Run ID | 作者 | 问题 | 语言 | 测评结果 | Time | Memory | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 153485 | 李鸣 | 求和比较 | C++ | Accepted | 1 MS | 272 KB | 840 | 2026-05-17 16:27:36 |
#include <iostream> using namespace std; int N, M; int target; int ans = 0; // index:当前处理第几个数 sum:当前子集和 void dfs(int index, int sum) { if (index == N + 1) { // 所有数字都选完了 if (sum == target) ans++; return; } // 两种选择:不选 或 选 dfs(index + 1, sum); // 不选 index dfs(index + 1, sum + index); // 选 index } int main() { cin >> N >> M; int total = N * (N + 1) / 2; // 1~N 总和 // 必须满足这两个条件,否则无解 if ((total - M) < 0 || (total - M) % 2 != 0) { cout << 0 << endl; return 0; } target = (total - M) / 2; // 要求子集的和 dfs(1, 0); // 暴搜 cout << ans << endl; return 0; }