這個問題是典型的回溯法,比八皇后問題簡化一點,重要的是其中乙個部分:在深搜過程中要進行值的判斷,來決定是否停止當前的搜尋,這對以減少執行時間十分重要,一開始我沒有考慮這個問題,就導致很多樣例都超時了。
題目如下:
有 n 份工作要分配給 n 個人來完成,每個人完成乙份。第 i 個人完成第 k 份工作所用的時間為乙個正整數 tik,其中1 ≤ i, k ≤ n。試確定乙個分配方案,使得完成這 n 份工作的時間總和最小。
輸入包含 n + 1 行。
第 1 行為乙個正整數 n。
第 2 行到第 n + 1 行中每行都包含 n 個正整數,形成了乙個 n × n 的矩陣。在該矩陣中,第 i 行第 k 列元素 tik 表示第 i 個人完成第 k 件工作所要用的時間。
1 行,包含乙個正整數,表示所有分配方案中最小的時間總和。
5
9 2 9 1 9
1 9 8 9 6
9 9 9 9 1
8 8 1 8 4
9 1 7 8 9
5
1 ≤ n ≤ 15
1 ≤ tik ≤ 10^4
**如下
#include using namespace std;
int n;
int people_work[15][15];
int vis[15]=;
int cur[15];
int min_time;
int total=0;
void cal_min_time(int num)
vis[i]=1;
cal_min_time(num+1);
total-=people_work[num][i];
vis[i]=0;}}
}}int main()
}min_time=-1;
cal_min_time(0);
cout
}
工作分配問題 (回溯法)
工作分配問題 time limit 1000 ms memory limit 65536 kib problem description 設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為 cij。試設計乙個演算法,為每乙個人都分配1 件不同的工作,並使總費用達到最小。設計乙個演算法,對於...
回溯法 工作分配問題(dfs)
include using namespace std typedef long long ll const int maxn 1e5 5 const int inf 0x3f3f3f3f int n,c 20 20 將工作i分配給第j個人所需要的費用 每個人分配到乙個對應的工作,n個工作分別分配給...
回溯法解決工作分配問題及分析
工作分配問題 設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為cij 設計乙個演算法,對於給定的工作費用,為每乙個人都分配1 件不同的工作,並使總費用達到最小。輸入格式 輸入資料的第一行有1 個正整數n 1 n 20 接下來的n行,每行n個數,表示工作費用。輸出格式 將計算出的最小總費用...