时间限制:1 s 空间限制:256 MB
设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij。试设计一个算法,为每一个人都分配一件不同的工作,并使总费用达到最小。
设计一个算法,对于给定的工作费用,计算最佳工作分配方案,使总费用达到最小。
输入
第一行有1个正整数n (1≤n≤20)。接下来的n行,每行n个数,第i行表示第i个人各项工作费用。
输出
将计算出的最小总费用输出
样例
样例输入1
3
4 2 5
2 3 6
3 4 5
样例输出1
9
这道题可以用dfs来做,但是必须剪枝
void dfs(int k){
if(sum>=minx) return ;
if(k==n+1){
if(sum<minx) minx=sum; //剪枝
return ;
}
for(int i=1;i<=n;i++){
if(!f[i]){
f[i]=1;
sum+=a[k][i];
dfs(k+1);
sum-=a[k][