题解 | 放苹果(回溯思想)

放苹果

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")

全部评论

相关推荐

点赞 评论 收藏
分享
07-01 23:23
郑州大学 Java
否极泰来来来来:牛客迟早有高三的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务