工作分配问题
题目:
设有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; }

浙公网安备 33010602011771号