【搜索】桐桐的運輸方案
阿新 • • 發佈:2019-02-08
pid 空格 tex oar 討論 star += text 限制
提交: 46 解決: 14
[提交] [狀態] [討論版] [命題人:外部導入]
後面n行每行兩個用空格隔開的實數,分別表示第1至第n件貨物的質量w和價值V。
問題 G: 【搜索】桐桐的運輸方案
時間限制: 1 Sec 內存限制: 64 MB提交: 46 解決: 14
[提交] [狀態] [討論版] [命題人:外部導入]
題目描述
桐桐有N件貨物需要運送到目的地,它們的質量和價值分別記為:
質量:W1,W2,…,Wn;
價值:Vl,V2,…,Vn;
已知某輛貨車的最大載貨量為x,並且當天只能運送一趟貨物。這輛貨車應該運送哪些貨物,才能在不超載的前提下使運送的價值最大?
輸入
第1行是一個實數,表示貨車的最大載貨量x(1<x≤I00)。
第2行是一個正整數,表示待運送的貨物數n(1<n≤20)。
輸出
第1行為被運送貨物的總價值(只輸出整數部分);
第2行為按編號大小順序輸出所有被運送貨物的編號(當一件都不能運送時,不輸)。
樣例輸入
20
4
3.5 4
4 5
5 6.8
6.9 7
樣例輸出
22
1 2 3 4
#include<bits/stdc++.h> #include<queue> #include<iostream> using namespace std;double cap,w[30],val[30],maxn; int n,o; int main() { cin >> cap >> n; for (int i = 1; i <= n; i++)cin >> w[i] >> val[i]; for (int i = 0; i < (1 << n); i++) { double curw=0,curv = 0; for (int j = 0; j < n; j++) { if ((1 << j)&i) { curw+= w[j + 1], curv += val[j + 1]; } if (curw > cap)break; } if (curw > cap)continue; if (maxn < curv)maxn = curv, o = i; } maxn = floor(maxn); cout << maxn << endl; for (int i = 0; i < n; i++) { if ((1 << i)&o)cout << i+1 << ‘ ‘; } }
【搜索】桐桐的運輸方案