計算機演算法設計與分析 工作安排問題

2021-10-01 09:03:49 字數 736 閱讀 1749

問題描述:設有n件工作分配給n個人,將工作i分配給第j個人所需的費用為cij。試設計乙個演算法,為每個人都分配一件不同的工作,並使得總費用達到最小。

輸入:第1行有1個正整數n(1≤n≤20),接下來的n行,每行n個數,表示工作費用。

輸出:計算的最小總費用

樣例輸入:

310 2 3

2 3 4

3 4 5

樣例輸出:

9繼續採用分支限界法,每個節點中存放的是目前的安排狀況,總花費,哪個工人已經被安排了工作,相比於旅行售貨員問題,這個問題簡單得多,不需要計算複雜的dis值,這個題dis的值就是父狀態的dis值加上新安排的花費,相比之下很容易計算。

**如下:

#includeusing namespace std;

int n;

int map[1005][1005];

int flag[1005];

int ans=0x3f3f3f;

struct node

};void bfs()

while(!q.empty())

nc.f=temp.f+1;

nc.tar[i]=1;

nc.dis=temp.dis+map[nc.f][i];

if(nc.f==n)

q.push(nc);

} }}int main()

return 0;

} ```

計算機演算法設計與分析解題心得

先觀察問題的結構 解的形式,再設計演算法 能分解成子問題,是非常有效的資訊 優化問題時,下界很重要。給乙個問題,從最簡單的case入手 觀察input的關鍵結構,看能否分 能否combine 觀察output,不要堅持追求optimal,追求sub optimal。sample.手動執行最基本的演算...

活動安排問題 計算機演算法

在對問題求解時,總是遵循某種規則做出在當前看來是最好的選擇,期待通過所做的區域性最優選擇來產生乙個全域性最優解。貪心演算法不是對所有問題都能得到整體最優解。從前有乙隻鵝,一天可以下兩個金蛋,但是在第一天直接殺了它可以拿到二十個金蛋。問如何在21天內拿到盡量多的金蛋?動態規劃 當n 21時會選擇最後一...

計算機演算法設計與分析 棋盤覆蓋問題

一 實驗目的與要求 1 掌握棋盤覆蓋問題的演算法 2 初步掌握分治演算法 二 實驗題 盤覆蓋問題 在乙個2k 2k 個方格組成的棋盤中,恰有乙個方格與其它方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。在棋盤覆蓋問題中,要用圖示的4種不同形態的l型骨牌覆蓋給定的特殊棋盤上除特殊方格以外的所有...