工作分配问题

题目:

设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为c[i][j]。试设计一个算法,为每一个人都分配一件不同的工作,并使总费用达到最小。

设计一个算法,对于给定的工作费用,计算最佳工作分配方案,使总费用达到最小(

 

输入

第一行有1个正整数n (1≤n≤11)。接下来的n行,每行n个数,第i行表示第i个人各项工作费用。

输出

输出计算出的最小总费用

样例

样例输入1

3
4  2  5
2  3  6
3  4  5

样例输出1

9

 

yee~

#include <bits/stdc++.h>
using namespace std;
int n;
int p[21][21];  
int Min=INT_MAX;  
int sum=0;  
int b[21];   

void dfs(int t)
{
    if(t>=n)   
    {
        if(Min>sum)   
        {
            Min=sum;  
            return;
        }
    }
    for(int i=0;i<n;i++)   
    {
        if(!b[i])   
        {
            b[i]=1;   
            sum+=p[t][i];   
            if(sum<Min) 
                dfs(t+1);
            b[i]=0;  
            sum-=p[t][i];
        }
    }

}

int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cin>>p[i][j];
        }
        b[i]=0;
    }
    dfs(0);
    cout<<Min<<endl;
    return 0;
}

 

posted @ 2023-03-22 22:41  nasia  阅读(59)  评论(0)    收藏  举报