天天看點

PTA--工作配置設定問題

設有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;
 
}
           

繼續閱讀