zoukankan      html  css  js  c++  java
  • 选择问题

    从m个数当中选择n个数,01规划结合搜索算法,

    用递归函数写的,感觉效率不高,测试了一下用例24 12,感觉程序实在是跑不动了,不过对于一些小的用例还是可以的,在想办法优化了,

    闲话少叙,上代码:

    #include <iostream>
    using namespace std;
    int data[25];
    int sum=0;
    
    void selectnfromm(int m,int n,int t)           //t表示进入到第t层递归,即判断是否要挑选第t个数
    {
        if(t==m)                        //判断是否已经检查了m个数
        {
            int k=0;
            for(int i=0;i<m;i++)
               if(data[i]==1)
                    k++;                //对于当前已经挑选的数计数;
            if(k==n)                    //判断是否是一个可行的方案
            {
                sum++;                  //方案数计算
                for(int i=0;i<m;i++)    //打印该方案
                if(data[i]==1)
                cout<<(i+1);
                cout<<endl;
            }
        }
        else
        {
            if(t<m)                      //搜索所有的方案
            {
                data[t]=1;               //赋值为1使递归
                selectnfromm(m,n,t+1);
                data[t]=0;               //赋值为0使递归
                selectnfromm(m,n,t+1);
            }
        }
    }
    
    int main()
    {
        int m,n;
        cout<<"输入m和n,从m中选n个(n<m<25):"<<endl;
        cin>>m>>n;
        for(int i=0;i<m;i++)
        data[i]=0;
        int t=0;
        cout<<"所有方案为:"<<endl;
        selectnfromm(m,n,t);
        cout<<"Sum:"<<sum<<endl;
    }
    
    
    
    
    
    
    态度决定高度,细节决定成败,
  • 相关阅读:
    关于unittest框架的传参问题
    爬虫的框架:Scarpy
    Robot Frameworke在python3上搭建环境以及快捷方式的创建
    安装第三方模块报错:read time out
    操作正则表达式遇到的问题
    gil锁 线程队列 线程池
    并发编程
    网络编程传输文件
    粘包现象
    UDP协议下的socket
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/3139182.html
Copyright © 2011-2022 走看看