工作效益
题目:
设有A,B,C,D,E五人从事J1,J2,J3,J4,J5五项工作,每人只能从事一项,他们的效益如下:
每人选择五项工作中的一项,在各种选择的组合中,找到效益最高的的一种组合输出。
下面开始解析:
这是一道搜索与回溯的题
这道题
一共只有3125种可能
完全可以一个一个试
所以用
搜索与回溯
这道题太简单
不多说
直接上代码
#include<bits/stdc++.h>
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
int f[1001][1001]={{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}},g[1001],p[1001],max1=0,max2=0,bc[1001],n;
int ddd(int z)
{
for(int i=1;i<=5;i++)
{
if(p[i]==0)//如果没人选过
{
p[i]=1;
g[i]=f[z][i];//保存
if(z==5)//如果满足条件
{
for(int j=1;j<=5;j++) max2+=g[j];
if(max2>max1)//与之前的比较
{
max1=max2;
for(int j=1;j<=5;j++) bc[j]=g[j];//保存
}
max2=0;
}
else ddd(z+1);//递归
p[i]=0;//回溯一步
}
}
}
int main()
{
freopen("gzxy.in","r",stdin);
freopen("gzxy.out","w",stdout);
ddd(1);
for(int i=1;i<=5;i++)//输出
cout<<bc[i]<<" ";
fclose(stdin);
fclose(stdout);
return 0;
}