貪心 部分揹包問題

2021-10-08 18:49:14 字數 798 閱讀 1115

阿里巴巴走進了裝滿寶藏的藏寶洞。藏寶洞裡面有 n(n ≤ 100) 堆金幣,第 i 堆金幣的總重量和總價值分別是 mi,vi(1 ≤ mi,vi ≤ 100)。阿里巴巴有乙個承重量為 t(t ≤ 1000) 的揹包,但並沒辦法將全部的金幣都裝進去。他想裝走盡可能多價值的金幣。所有金幣都可以隨意分割,分割完的金幣重量價值比(也就是單位**)不變。請問阿里巴巴最多可以拿走多少價值的金幣?

第一行兩個整數 n、t

接下來 n 行,每行兩個整數 mi,vi

乙個整數表示答案,輸出兩位小數

輸入樣例

4 50

10 60

20 100

30 120

15 45

輸出樣例

240.00

先將每堆金幣按金幣的價值重量比進行排序,越高的排在越前面,然後從前往後一堆一堆的放入揹包,當揹包裝不下某一堆金幣時,則取這堆金幣的部分裝入,使得裝入的金幣總重量等於揹包的承重量即可。

#include

using

namespace std;

struct nodef[

1005];

bool

cmp(node a,node b)

intmain()

sort

(f,f+n,cmp)

;// 排序

for(

int i=

0;i)else

}printf

("%.2lf\n"

,sum)

;return0;

}

部分揹包問題(貪心基礎)

有n個物體,第i個物體重量為w i 價值為v i 在總重量不超過c的情況下讓總價值盡量高.取乙個物品必須全取,價值和重量按比例計算 分析 貪心策略 優先拿 價值除以重量的值 最大的,重量和小於等於c include include include using namespace std struct...

貪心法求解部分揹包問題

揹包問題 給定乙個載重為m的揹包,及n個質量為wi 價值為pi的物體,1 i n,要求把物體裝滿揹包,且使得揹包內的物體價值最大。假設 xi是物體i被裝入揹包的部分,0 xi 1。當xi 0時,表示物體i沒有被裝入揹包 當xi 1時,表示物體i被全部裝入揹包 當xi處於0 1之間,表示物體i的一部分...

部分揹包問題 貪心演算法

有n個商品,每個商品的重量為wi,為 pi,現有乙個揹包,最多能裝 的重量 其中 0 i 問 怎樣裝能使包中裝入的商品價值最高 對於每個商品可以只裝該商品的一部分 include stdio.h include iostream include stdlib.h define maxsize 100...