工作分配

Problem Description

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

Input

输入有多组数据,每组数据的第一行有1个正整数n(1<=n<=20)。接下来的n行,每行n个数,第i行表示第i个人各项工作费用。

Output

对于每组数据输出一行,这一行只包含一个整数,表示最小费用。

Sample Input

3
4 2 5
2 3 6
3 4 5

Sample Output

9
 
   
#include
#include
#define INF 1<<23
int n,maxn;
int map[23][23],vis[23];
void dfs(int st,int cnt)//st为行的编号,cnt为当前的最小费用
{
	if(cnt>maxn) return;//剪枝
	if(st==n)//如果所有行都深搜完了
	{
		maxn=(cnt


你可能感兴趣的:(树)