设有 A , B , C , D , E 五人从事 J1 , J2 , J3 , J4 , J5 五项工作,每人只能从事一项,他们的效益如下。
每人选择五项工作中的一项,在各种选择的组合中,找到效益最高的的一种组合输出。
/*相当于将五种工作排列组合,从中挑选出效率最高的*/
#include<iostream>
#include<cstdio>#include<cstdlib>#include<iomanip>using namespace std;int data[6][6]={ {0,0,0,0,0,0},{0,13,11,10,4,7},{0,13,10,10,8,5},{0,5,9,7,7,4},{0,15,12,10,11,5},{0,10,11,8,8,4}};//每个人的工作效率 int maxx=0,g[10],f[10];bool work[6];//每个工作又没有被选 int search(int,int);int main(){ search(1,0); for(int i=1;i<=5;i++) { cout<<char(64+i)<<":J"<<g[i]<<" ";//每个工人干什么工作 } cout<<"supply:"<<maxx<<endl;//输出效率 return 0;}int search(int x,int t){ for(int i=1;i<=5;i++) { if(!work[i])//第i个工作没有被选 { f[x]=i;//第x个人选第i个工作 work[i]=1;//工作被选 t+=data[x][i];//效率和增加 if(x==5) { if(t>maxx)//选出效率最高的那一个 { maxx=t; for(int i=1;i<=5;i++) { g[i]=f[i]; } } } else search(x+1,t); t-=data[x][i];//回溯 work[i]=0; } }}