題目內容:
設某一機器由n個部件組成, 部件編號為1 ~ n,每一種部件都可以從m個不同的**商處購得,**商編號為1 ~ m。
設wij是從**商j處購得的部件i的重量, cij是相應的**。對於給定的機器部件重量和機器部件**,計算總**不超過d的最小重量機器設計。
(注意:輸出結果中第一行最後沒有空格。比如下面的輸出樣例中1 3 1後面沒有空格。)
輸入格式 :
第1行輸入3個正整數n, m和d。接下來n行輸入wij(每行m個整數),最後n行輸入cij(每行m個整數), 這裡1≤n、m≤100。
輸出格式:
輸出的第1行包括n個整數,表示每個對應的**商編號,第2行為對應的最小重量。
輸入樣例:
3 3 7
1 2 3
3 2 1
2 3 2
1 2 3
5 4 2
2 1 2
輸出樣例:
1 3 1
4演算法思想具體演算法解釋
可以將問題抽象為乙個n層的樹,每一層表示乙個零件,每個節點的孩子節點數為**商數,代表可選擇的情況,按照這個規則這個規則建立樹並進行遍歷,找到最小值即可。例如2個零件,3個**商的樹為:
源**
//
//題目內容:
//設某一機器由n個部件組成, 部件編號為1~n,每一種部件都可以從m個不同的**商處購得,**商編號為1~m。
//設wij是從**商j處購得的部件i的重量, cij是相應的**。對於給定的機器部件重量和機器部件**,計算總**不超過d的最小重量機器設計。
//(注意:輸出結果中第一行最後沒有空格。比如下面的輸出樣例中1 3 1後面沒有空格。)
////輸入格式 :
//第1行輸入3個正整數n, m和d。接下來n行輸入wij(每行m個整數),最後n行輸入cij(每行m個整數), 這裡1≤n、m≤100。
////輸出格式:
//輸出的第1行包括n個整數,表示每個對應的**商編號,第2行為對應的最小重量。
////輸入樣例:
//3 3 7
//1 2 3
//3 2 1
//2 3 2
//1 2 3
//5 4 2
//2 1 2
////輸出樣例:
//1 3 1
//4#define _crt_secure_no_warnings
#include
#include
using
namespace std;
int n =0;
//零件數量
int m =0;
//**商數量
int d =0;
//最大總價
int bestd =0;
//最小質量
vector
int>> vwij;
//質量
vector
int>> vcij;
//**
vector<
int> way;
//記錄每個零件選擇的**商
int w =0;
//當前重量
int c =0;
//當前**
int num =0;
//當前層數
vector<
int> op;
//當前路徑
void
run();
//建立樹
void
findbestd
(int ni,
int& w,
int& c, vector<
int>
& op)
;//遍歷樹
void
demo()
;//示例
intmain
(void
)void
run(
)//給質量、**賦值,即建立樹
for(
int i =
1; i <= n; i++)}
for(
int i =
1; i <= n; i++)}
bestd = vwij[1]
[1]+ vwij[2]
[1]+ vwij[3]
[1];
findbestd(1
, w, c, op)
;//遍歷樹
//輸出路徑
for(
int i =
1; i <= n; i++
) cout << endl;
cout << bestd << endl;
//輸出最佳值
}//遞迴遍歷樹 num:當前遍歷層數 w:當前重量 c:當前**
void
findbestd
(int ni,
int& w,
int& c, vector<
int>
& op)}}
else}}
}//示例
//3 3 7
//1 2 3
//3 2 1
//2 3 2
//1 2 3
//5 4 2
//2 1 2
void
demo()
,,,}
; vcij =,,
,};}
回溯法求解最小機器重量設計問題
題目 設某一機器由n個部件組成,部件編號為1n,每一種部件都可以從m個不同的 商處購得,商編號為1m。設wij是從 商j處購得的部件i的重量,cij是相應的 對於給定的機器部件重量和機器部件 計算總 不超過d的最小重量機器設計。注意 輸出結果中第一行最後沒有空格。比如下面的輸出樣例中1 3 1後面沒...
回溯法解決最小機器重量問題
1.問題描述 設某一機器由n個部件組成,每一種部件都可以從m個不同的 商處購得。設 w ij是從 商j 處購得的部件i的重量,c ij是相應的 試設計乙個回溯演算法,對於給定的機器部件重量和機器部件 計算總 不超過c的最小重量機器設計。2.解題思路 3.演算法設計 回溯法要求要給出約束條件,很明顯 ...
最小重量機器設計問題 回溯法)
include include using namespace std define maxn 1000 int n 部件個數 int m 供貨商個數 int max c 最大 int w maxn maxn int c maxn maxn 費用 int cc 當前 int cw 當前重量 int ...