无·法 2022-08-07 14:50 采纳率: 100%
浏览 55
已结题

如何穷举符合条件的数组?求算法

从44、45、46...72、73共有29个数字,每次取10个数,每个数字可以重复取,要求这10个数的和为500,共有多少种情况?

比如:50取出10次就是500算符合情况。44和54各取出5次也算符合的情况,以下这些都算:
50 50 50 50 50 50 50 50 50 50
44 54 44 54 44 54 44 54 44 54
44 44 44 44 44 54 54 54 54 54
47 47 48 48 49 49 51 52 52 57
45 46 47 48 48 49 53 54 55 55
47 47 47 48 49 49 51 53 54 55
其他还有那些符合条件的情况?请穷举出来。

  • 写回答

3条回答 默认 最新

  • KaMtuo 2022-08-08 20:29
    关注

    dfs暴搜一下就行,其实剪完枝复杂度不是很大(最深只有10层),加上输出c++也只要不到10s。

    /*----------------------------------*/
    /* Author : KaMtuo                  */
    /* Email : kamtuo@qq.com            */
    /* Creation_time : 2022-08-08 20:06 */
    /* Software : Visual Studio Code    */
    /*----------------------------------*/
    
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #include <queue>
    #include <vector>
    #include <map>
    
    #define endl "\n"
    
    using std::cin;
    using std::cout;
    using std::max;
    using std::min;
    using std::sort;
    using std::queue;
    using std::priority_queue;
    using std::vector;
    using std::map;
    using std::string;
    
    const int N = 30;
    const int target_num = 500;
    
    int cnt;
    vector<int> in;
    
    void dfs(int now, int sum, int to) {
        if (sum == target_num && to == 10) {
            cnt ++;
            for (int i = 0; i < in.size(); i ++) cout << in[i] << ' ';
            cout << endl;
        }
        if (sum >= target_num || to >= 10) return;
        for (int i = now; i <= 73; i ++) {
            in.push_back(i);
            dfs(i, sum + i, to + 1);
            in.pop_back();
        }
    }
    
    int main() {
        freopen("all.txt", "w", stdout);
        dfs(44, 0, 0);
        cout << cnt << endl;
        return 0;
    }
    

    总共177376种,以下是部分方案

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月19日
  • 已采纳回答 8月11日
  • 创建了问题 8月7日

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化