选择问题
从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;
}
态度决定高度,细节决定成败,

浙公网安备 33010602011771号