演算法第5章上機實踐報告

2022-08-21 14:51:14 字數 1120 閱讀 7858

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 

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;

}

這道題目是我跟隊友一起解決的,當時debug了很久,發現自己 v 的函式的時候寫錯了。於是改用for迴圈疊加算,老師說太慢了,就又寫了一遍現在的**,就過了。。過了。。

演算法第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和...