7-2 工作分配問題 (20 分)
設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為cij 。 設計乙個演算法,對於給定的工作費用,為每乙個人都分配1 件不同的工作,並使總費用達到最小。
輸入資料的第一行有1 個正整數n (1≤n≤20)。接下來的n行,每行n個數,表示工作費用。
將計算出的最小總費用輸出到螢幕。
在這裡給出一組輸入。例如:
3
10 2 3
2 3 4
3 4 5
在這裡給出相應的輸出。例如:
9
找到乙個 1 ~ n 的排列 s。
使得 的和最小。
這樣就化簡成了排列樹問題。
1、解空間
排列樹2、解空間樹
以 n = 3 時作為例子。
3、剪枝(約束函式或限界函式)方法描述
if(v1);v 是當前工作費用,如果 v 已經大於等於求出來的最小費用,就不必再遞迴搜尋了。
4、**
#include #include這道題目是我跟隊友一起解決的,當時debug了很久,發現自己 v 的函式的時候寫錯了。於是改用for迴圈疊加算,老師說太慢了,就又寫了一遍現在的**,就過了。。過了。。using
namespace
std;
const
int maxn = 1e3+5
;int
n;int
num[maxn], c[maxn][maxn];
int ans = 1e9, v = 0
;void dfs(int
x)
return
; }
for(int i = x; i <= n; ++i)
}int
main()
}dfs(1);
printf("%d
", ans);
return0;
}
演算法第5章上機實踐
1.實踐題目 工作分配問題 2.問題描述 7 2 工作分配問題 20 分 設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為cij 設計乙個演算法,對於給定的工作費用,為每乙個人都分配1 件不同的工作,並使總費用達到最小。輸入資料的第一行有1 個正整數n 1 n 20 接下來的n行,每行n...
演算法第5章實踐報告
實踐題目 工作分配問題 問題描述 7 2 工作分配問題 20 分 設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為cij 設計乙個演算法,對於給定的工作費用,為每乙個人都分配1 件不同的工作,並使總費用達到最小。輸入資料的第一行有1 個正整數n 1 n 20 接下來的n行,每行n個數,表...
作業系列 演算法第3章上機實踐報告
1.實踐題目 7 3編輯距離問題 2.問題描述 設a和b是2個字串。要用最少的字元操作將字串a轉換為字串b。這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。將字串a變換為字串b所用的最少字元運算元稱為字串a到 b的編輯距離,記為d a,b 對於給定的字串a和...