回溯法求最佳工作分配方案

2021-08-21 15:47:55 字數 1016 閱讀 6585

這個問題是典型的回溯法,比八皇后問題簡化一點,重要的是其中乙個部分:在深搜過程中要進行值的判斷,來決定是否停止當前的搜尋,這對以減少執行時間十分重要,一開始我沒有考慮這個問題,就導致很多樣例都超時了。

題目如下:

有 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個數,表示工作費用。輸出格式 將計算出的最小總費用...