RT,自己在没看题解的情况下写了如下代码:
#include <bits/stdc++.h>
using namespace std;
int n, k, cnt;
void dfs(int pos, int cur, int num) {
if (pos == k) {
cnt++;
return;
}
for (int i = cur; i <= num >> 1; i++) {
dfs(pos + 1, i, num - i);
}
}
int main() {
scanf("%d%d", &n, &k);
dfs(1, 1, n);
printf("%d\n", cnt);
return 0;
}
一开始只是写了个很朴实的 DFS,然后发现扫出来一大堆重复的,然后根据样例解释试着改了改循环条件和递归边界条件,发现竟然过了(
想问一下大佬们,这份代码为什么正确,如果不正确,能否来组 hack