7-1 装载问题 (10 分)(思路+详解)
一:題目 Come 寶寶!!
輸出格式:
輸出所有可行的方案數(shù)量
輸入樣例1:
3 50 50 10 40 40結(jié)尾無(wú)空行
輸出樣例1:
結(jié)尾無(wú)空行
輸入樣例2:
結(jié)尾無(wú)空行
輸出樣例2:
二:思路
1.這個(gè)解的空間選擇的是子集樹(shù)
2.遞歸函數(shù)參數(shù)
backtacking()
把所有的可行解都記錄下來(lái)
3.返回的結(jié)果
用一個(gè)vector<vector >ans:來(lái)存結(jié)果
vector path:用來(lái)存每次的集裝箱所裝的船的序號(hào)
將到達(dá)葉節(jié)點(diǎn)的時(shí)候集裝箱(所裝船的序號(hào)存進(jìn)去)
3.遞歸終止條件
path.size() == n時(shí)候終止
這時(shí)候就是遞歸到達(dá)葉節(jié)點(diǎn)的時(shí)候 有了一種可行解
4.橫向的單層的for循環(huán)為遍歷所有集裝箱的重量,縱向的遞歸是不斷為剩下的集裝箱選擇船號(hào)
5.對(duì)結(jié)果的選擇:具體看代碼
6.示例舉例
將集裝箱1和2裝上第一艘輪船,而將集裝箱3裝上第二艘輪船; 112
將集裝箱1和2裝上第二艘輪船,而將集裝箱3裝上第一艘輪船; 221
將集裝箱1和3裝上第一艘輪船,而將集裝箱2裝上第二艘輪船; 121
將集裝箱1和3裝上第二艘輪船,而將集裝箱2裝上第一艘輪船; 212
7:圖示
三:上碼
/**思路:1.這個(gè)解的空間選擇的是子集樹(shù)2.遞歸函數(shù)參數(shù)backtacking()把所有的可行解都記錄下來(lái) 3.返回的結(jié)果用一個(gè)vector<vector<int> >ans:來(lái)存結(jié)果vector<int> path:用來(lái)存每次的集裝箱所裝的船的序號(hào) 將到達(dá)葉節(jié)點(diǎn)的時(shí)候集裝箱(所裝船的序號(hào)存進(jìn)去) 3.遞歸終止條件path.size() == n時(shí)候終止這時(shí)候就是遞歸到達(dá)葉節(jié)點(diǎn)的時(shí)候 有了一種可行解4.橫向的單層的for循環(huán)為遍歷所有集裝箱的重量,縱向的遞歸是不斷為剩下的集裝箱選擇船號(hào)5.對(duì)結(jié)果的選擇:具體看代碼 6.示例舉例將集裝箱1和2裝上第一艘輪船,而將集裝箱3裝上第二艘輪船; 112將集裝箱1和2裝上第二艘輪船,而將集裝箱3裝上第一艘輪船; 221將集裝箱1和3裝上第一艘輪船,而將集裝箱2裝上第二艘輪船; 121將集裝箱1和3裝上第二艘輪船,而將集裝箱2裝上第一艘輪船; 212**/ #include<bits/stdc++.h> using namespace std;vector<vector<int> > ans;//用來(lái)存放每次的可行解 vector<int> path;//用來(lái)存放單次的可行解 int n,c1,c2;void backtacking(){//遞歸終止條件if (path.size() == n) {ans.push_back(path);return;} for (int i = 1; i <= 2; i++) {path.push_back(i);backtacking();path.pop_back(); }} int main(){vector<int> v;int count = 0;cin >> n >> c1 >> c2;for (int i = 0; i < n; i++) {int num;cin >> num;v.push_back(num); }backtacking();for (int i = 0; i < ans.size(); i++) {int sumWeight1 = 0;//記錄在船1上的累計(jì)重量 int sumWeight2 = 0;//記錄在船2上的累計(jì)重量 for (int j = 0; j < n; j++) {if (ans[i][j] == 1){ sumWeight1 += v[j]; }else{sumWeight2 += v[j];} // cout << ans[i][j] << ' ';}// cout << endl;if(sumWeight1 <= c1 && sumWeight2 <= c2 && sumWeight1 != 0 && sumWeight2 != 0){//這里是比較裝的重量和船的載重 count++;// cout << sumWeight1 << ' ' << sumWeight2; }}cout << count; }
加油 boy!!! 下雪了 哈哈哈 今年的第一場(chǎng)雪!!!
總結(jié)
以上是生活随笔為你收集整理的7-1 装载问题 (10 分)(思路+详解)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电脑微信卡顿、闪退问题如何解决
- 下一篇: Enter键的多种用途