設有n件工作配置設定給n個人。将工作i配置設定給第j個人所需的費用為cij 。 設計一個算法,對于給定的工作費用,為每一個人都配置設定1 件不同的工作,并使總費用達到最小。
輸入格式:
輸入資料的第一行有1 個正整數n (1≤n≤20)。接下來的n行,每行n個數,表示工作費用。
輸出格式:
将計算出的最小總費用輸出到螢幕。
輸入樣例:
在這裡給出一組輸入。例如:
3
10 2 3
2 3 4
3 4 5
輸出樣例:
在這裡給出相應的輸出。例如:
9
#include <iostream>
using namespace std;
#define inf 0xfffffff
int n, ans;
int a[1000][1000];
int b[1000];
void dfs(int i, int sum)//i是行号
{
if (sum > ans) //剪枝
return;
if (i == n + 1 && sum < ans)
{
ans = sum;
return;
}
for (int j = 1; j <= n; j++)
{
if (!b[j])//周遊第i行 沒有被周遊過列号j 的元素
{
b[j] = 1;
dfs(i + 1, sum + a[i][j]);
b[j] = 0;
}
}
}
int main()
{
scanf("%d",&n);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
scanf("%d",&a[i][j]);
ans = inf;
dfs(1, 0);
printf("%d\n",ans);
return 0;
}