题解 | 放苹果(回溯思想)
放苹果
https://www.nowcoder.com/practice/4f0c1e21010e4d849bde5297148e81d9
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
vector<vector<int>> res;
map<vector<int>, bool> myMap;
vector<int> path;
// int pathSum = 0;
void backtrace(int num, int plate, int start) {
if(plate==1) {
if(num>=path.back()) {
path.push_back(num);
res.push_back(path);
path.pop_back();
}
return;
}
for(int i = start; i<num/2+1; i++) {
path.push_back(i);
backtrace(num-i, plate-1, i);
path.pop_back();
}
}
int main() {
int m, n; // m评估, n盘子
while (cin >> m >> n) { // 注意 while 处理多个 case
if(n==1) {
cout << 1 << endl;
break;
}
backtrace(m, n, 0);
cout << res.size() << endl;
}
}
// 64 位输出请用 printf("%lld")
海康威视公司福利 1257人发布