問題描述:設有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型骨牌覆蓋給定的特殊棋盤上除特殊方格以外的所有...