最大效益

设有ABCDE五人从事J1J2J3J4J5五项工作,每人只能从事一项,他们的效益如下。
 
每人选择五项工作中的一项,在各种选择的组合中,找到效益最高的的一种组合输出。
 
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
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 max1=0,g[10],f[10];
bool pd[10];
void dfs(int q,int p)
{
    for(int i=1;i<=5;i++)
    {
        if(pd[i]==0)
        {
            f[q]=i;
            pd[i]=1;
            p+=data[q][i];
            if(q<5)dfs(q+1,p);
            else if(p>max1)
            {
                max1=p;
                for(int i=1;i<=5;i++)
                g[i]=f[i];
            }
        p-=data[q][i];
        pd[i]=0;
        }
    }
}
int main()
{
    dfs(1,0);
    for (int i=1;i<=5;i++)
    cout<<char(64+i)<<":J"<<g[i]<<" ";
    cout<<endl;
    cout<<"supply:"<<max1<<endl;                 
}

 

posted @ 2017-03-23 20:50  zzzzx  阅读(376)  评论(1编辑  收藏  举报