组合问题之代表团出访
程序员文章站
2024-03-15 21:12:36
...
【组合+递归】
X星球要派出一个5人组成的观察团前往W星。 其中: A国最多可以派出4人。 B国最多可以派出2人。 C国最多可以派出2人。 D国最多可以派出1人。 E国最多可以派出1人。 F国最多可以派出3人。 那么最终派往W星的观察团会有多少种国别的不同组合呢?
#include<iostream>
using namespace std;
int a[6]={4,2,2,1,1,3};
int x[6];//表示解向量
//k:当前正在处理的下标(国家)
//num:5个人的观察团还剩几个名额
int getMin(int a,int b){
if(a<=b)
return a;
else
return b;
}
void print(){
for(int i=0;i<6;i++)
cout<<x[i]<<" ";
cout<<endl;
}
void f(int k,int num){
if(k==6){
if(num==0) print();
return ;
}
int m=getMin(num,a[k]);//取剩余容量与最大可放的最小值
for(int i=0;i<m;i++){
x[k]=i;//假设k国就是i个人了
f(k+1,num-i);//去安排剩下几个国家的人数
}
}
int main(){
f(0,5);
return 0;
}