阿里巴巴走進了裝滿寶藏的藏寶洞。藏寶洞裡面有 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...