大王好了 2022-01-14 11:29 采纳率: 0%
浏览 51

C++:动态规划之分组问题所有解

将若干个人(A,B,C,D,E,F,G……)分成若干队,每队人数可以是1、2或者3人。已知n,求组队详细方案
例:有3个人,方案有5个,分别是全部单独组队方案{A,B,C} , 单独组队与双人组队方案{A,BC} {AB,C} {AC,B}以及三人组队方案{ABC}
我知道求出组合的话用动态规划算法有类似,就是这个https://blog.csdn.net/zongjiaxiao/article/details/53223642,但这个只计算出方案数,没有输出具体方案
希望各位能够给个代码或者给个思路谢谢
  • 写回答

3条回答 默认 最新

  • 真相重于对错 2022-01-14 12:30
    关注

    其实就是求组合,C(n,1),c(n,2),c(n,3),跟动态规划没啥关系

    
    
    #include <iostream>
    #include <vector>
    using namespace std;
    class project {
            void combin(vector<char> team, int pos, int n, vector<char>& item) {
                    int size = team.size();
                    if (n == 0) {
                            res.push_back(item);
                            return;
                    }
                    for (int i = pos; i < size; i++) {
                            item.push_back(team[i]);
                            combin(team, i + 1, n - 1, item);
                            item.pop_back();
                    }
            }
    public:
            vector<vector<char>> res;
            void getresult(vector<char> vecteam, int size) {
                    vector<char> tmp;
                    combin(vecteam, 0, size, tmp);
                    
            }
    };
    int main()
    {
    
            vector<char> team{ 'A','B','C' };
            project p;
            p.getresult(team, 1);
            p.getresult(team, 2);
            p.getresult(team, 3);
            for (auto v : p.res) {
                    for (auto c : v) {
                            cout << c << " ";
                    }
                    cout << endl;
            }
    }
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 1月14日

悬赏问题

  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决