裝船問題 貪心演算法

2021-10-10 20:48:14 字數 1549 閱讀 3678

王小二畢業後從事船運規劃工作,吉祥號貨輪的最大載重量為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 安找遞增的順序排列後,我只需要順序相加小於我...