工作分配问题
题目描述:
设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij。试设计一个算法,为每一个人都分配一件不同的工作,并使总费用达到最小。
设计一个算法,对于给定的工作费用,计算最佳工作分配方案,使总费用达到最小。
输入格式:
第一行有1个正整数n (1≤n≤20)。接下来的n行,每行n个数,第i行表示第i个人各项工作费用。
输出格式:
计算出的最小总费用
样例输入:
3 4 2 5 2 3 6 3 4 5
样例输出:
9
时间限制:1000ms
空间限制:128MByte
#include<bits/stdc++.h> using namespace std; bool c[25] = {}; int m[25][25], ans = 0x3f3f3f3f; int n; void dfs(int now, int s) { if(now == n +1){ if(s < ans) ans = s; return; } for(int i = 1; i <= n; i++){ if(c[i]) continue; if(s + m[now][i] > ans) continue; c[i] = 1; dfs(now +1, s + m[now][i]); c[i] = 0; } } int main() { cin>>n; for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) cin>>m[i][j]; dfs(1, 0); cout<<ans; return 0; }