1. 程式人生 > >【搜索】桐桐的運輸方案

【搜索】桐桐的運輸方案

pid 空格 tex oar 討論 star += text 限制

問題 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)。

後面n行每行兩個用空格隔開的實數,分別表示第1至第n件貨物的質量w和價值V。

輸出

第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 << ; } }

【搜索】桐桐的運輸方案