题解 | #放苹果#

放苹果

https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf

#include <atomic>
#include <iostream>
#include <vector>
using namespace std;

vector<vector<int>> result;
vector<int> path;
/*
int sum_up(vector<int>& vec)
{
    int sum=0;
    for(int num:vec){
        sum += num;
    }
    return sum;
}
*/
void backtracking(int m, int n, int plateIndex) //m为剩余苹果数, //n为盘子数
{
    for (int i = 0; i < n - 1; i++) {
        if (path[i] < path[i + 1]) return;
    }
    if (m == 0) {
        result.push_back(path);
        //cout << path[0] << path[1] << path[2] << endl;
        return;
    }

    for (int j = 0; j < m; j++) {
        path[plateIndex]++;
        backtracking(m - 1, n, plateIndex);
        j--;
        path[plateIndex]--;
        if (plateIndex < n - 1) {
            plateIndex++;
        }
        else break;
    }
}
int main() {
    int m, n;//m个同样的苹果,n个同样的盘子
    cin >> m >> n;
    path = vector<int>(n, 0);
    backtracking(m, n, 0);
    cout << result.size();
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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