• 选择问题


    从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;
    }
    
    
    
    
    
    
    态度决定高度,细节决定成败,
  • 相关阅读:
    使用Random类生成指定范围的随机数
    js ==和===的区别
    js中的undefined
    js的split函数
    springboot发送邮件
    1032 Sharing (25分)(数组链表)
    1031 Hello World for U (20分)
    1030 Travel Plan (30分)(dijkstra 具有多种决定因素)
    1029 Median (25分)
    1026 Table Tennis (30分)
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/3139182.html
Copyright © 2020-2023  润新知