王小二畢業後從事船運規劃工作,吉祥號貨輪的最大載重量為m噸,有10種貨物可以裝船。第i種貨物有w
iw_i
wi噸,總價值是p
ip_i
pi。王小二的任務是從10種貨物中挑選若干噸上船,在滿足貨物總重量小於等於m的前提下,運走的貨物的價重比最大。
input
輸入資料的第一行有乙個正整數m(0 < m < 10000),表示所有貨物最大載重量。在接下來的10行中,每行有若干個數(中間用空格分開),第i行表示的是第i種貨物的貨物的總價值p
ip_i
pi,總重量w
iw_i
wi。(p
ip_i
pi是w
iw_i
wi的整數倍,0 < p
ip_i
pi ,w
iw_i
wi < 1000)
output
輸出乙個整數,表示可以得到的最大價值。
sample input
100
1010
2010
3010
4010
5010
6010
7010
8010
9010
10010
sample output
550
(1)題目要求運走貨物的價重比達到最大,並輸出船上貨物的總價值。(價重比 = ** / 重量)(2)使用結構體儲存這10種貨物各自的價值、重量以及價重比。
(3)先計算出10種貨物各自的價重比,並使用sort函式將其從小到大排列,並按照這個貨物順序裝船。可能這批貨物正好裝滿船或船上有空餘,這時的最大價值就是這批貨的總價值;也可能裝到第i(i < 10)種貨物時,不能全裝入,那就裝入該貨物的一部分,這時最大價值 = 前(i - 1)種貨物的總價值 + 第 i 種貨物的價重比 * 貨輪剩餘載重量。
#include
using
namespace std;
struct node //結構體用於儲存10種貨物各自的價值、重量和價重比
a[10];
bool
cmp(node a,node b)
//定義比較函式cmp,作為sort函式的第三個引數,作用是將價重比從大到小排列
intmain()
sort
(a,a+
10,cmp)
;//將價重比從大到小排列
int i,sum=0;
for(i=
0;i<
10;i++
)//可以裝入整個貨物 i
if(i<10)
//不能裝入整個貨物 i ,但船上還有空間
sum+
=m*a[i]
.pw;
//那就裝入貨物 i 的一部分
cout
}
裝船問題 貪心演算法
description 王小二畢業後從事船運規劃工作,吉祥號貨輪的最大載重量為m噸,有10種貨物可以裝船。第i種貨物有wi噸,總價值是pi。王小二的任務是從10種貨物中挑選若干噸上船,在滿足貨物總重量小於等於m的前提下,運走的貨物的價重比最大。input 輸入資料的第一行有乙個正整數m 0 m 10...
貪心演算法之最優裝船問題
越來越發現自己的程式設計功底很差,於是近期打算惡補下。看到一題目,初見覺得很簡單,但是實際程式設計的時候,可能是由於自己的基本功太弱的原因吧,還是花費了很長的時間的。題目如下 有一批貨櫃要裝入乙個載質量為c的貨船種,每個貨櫃的質量由使用者自己輸入指定,在貨船的裝載體積不限的前提下,如何裝載貨櫃才能盡...
貪心演算法之最優裝船
在乙個固定重量的貨船中裝最大重量的貨櫃,忽略空間 如最大重量是15 而我有五個箱子重量分別為 2 4 66 8 60 那麼我裝入的箱子應該為第1 2 4個 我現在有兩個陣列,乙個w 5 儲存這五個箱子的重量另乙個x 5 儲存這五個箱子的下標 當我的w 5 安找遞增的順序排列後,我只需要順序相加小於我...