0 1揹包 分數揹包

2021-08-13 08:20:32 字數 2341 閱讀 9847

題目出自北航oj

時間限制:2000ms   記憶體限制:65536kb

「朋友,你渴望力量嗎?」

「不渴望謝謝。」

「那朋友,你想要濃密的頭髮嗎?」

「想。」

bamboo停下腳步望了望角落裡的巫師:「你這不是變小藥嗎?還是盜版?喂,是110嗎?」

巫師趕緊解釋:「不是,你仔細看,我這巴拉拉魔髮藥水是膠體形態的(??),汲取魔仙堡的時光泉水並加入精心挑選的朵蜜星球的立方體綠色能量混合而成,效果驚人啊!」

bamboo一聽拔腿就走,「別走啊,你可以自己配一下aptx4844魔髮藥水實驗一下啊! 少年你不在乎你的髮際線了嗎?」

於是,bamboo耐著性子,看巫師從袖子裡掏出

m m

瓶時光泉水和

k k

粒綠色能量。每瓶時光泉水重量為

c c

,生髮效果為

l l

;每粒綠色能量的重量為

w w

,生髮效果為

r r

。但一瓶aptx4844的重量不能超過

s s

,否則很難過安檢(難道不是難以下嚥?)。

配置魔髮藥水需要用到至多兩種原料:固態的綠色能量和液態的時光泉水。但是由於兩者***不一樣,製作時優先選用***小的綠色能量,即先考慮使用綠色能量使得生髮效果最大,然後再考慮時光泉水。

bamboo準備製作一瓶aptx4844試試效果,同時力求達到最好的生髮效果,所以可以得到的最佳生髮效果為多少?

多組資料輸入。

每組資料第一行三個整數,m,k,s,均不大於1e5。

接下來m行每行2個正整數 c 和 l;

然後k行每行2個正整數 w 和 r;

每個c,i,w,r均不大於1e5

對於每組資料,輸出乙個數,為強調科學性,保留一位小數,為最佳生髮效果。

3 2 6

1 22 1

2 21 2

2 3

9.0

綠色能量乙個就是乙個,單個為最小單位,不要有其他想法。但是瓶裝時光泉水是液體,用不完一瓶可以以後用啊

題目意思是說優先裝綠色顆粒,達到最優之後再裝瓶裝藥水。

裝綠色顆粒的過程就相當於0-1揹包,而裝瓶裝藥水的過程就相當於分數揹包。

```0-1揹包過程(綠色顆粒)

```首先要引入乙個變數lv_w來記錄綠色顆粒用完或不能繼續裝之後,所裝的重量和。

用乙個for迴圈從重量為0開始,向後遍歷,直到達到某一重量p之後,ans[p]=ans[s],這裡的p值就是0-1揹包裝完之後所佔掉的重量。

```分數揹包過程(瓶裝藥水)

```分數揹包過程相對比較複雜,因為一瓶藥水不一定要全部使用,所以這裡要優先使用價效比高的藥水,價效比即  value/weight ,所以構建乙個結構體和cmp函式,對瓶裝藥水按價效比排序,優先裝價效比高的藥水。

示例**

/* 

author: baiye

result: ac submission_id: 484793

created at: sun dec 10 2017 18:12:09 gmt+0800 (cst)

problem_id: 1060 time: 642 memory: 3360

*/#include#include#includeusing namespace std;

int weight_lv[100007];//綠色能量的重量

int value_lv[100007];//綠色能量的價值

long long ans[200005];

long long lv_w;//表示裝完綠色能量後所佔的重量

int m,k,s;//m瓶時光泉水和k粒綠色能量,一瓶aptx4844的重量不能超過s

struct quan;

void zeroonepack(int weight,int value)//01揹包

int main()

for(int i=1;i<=k;i++)

int p;

for( p=0;p<=s;p++)//01揹包

lv_w=p;

double ans_=(double)ans[s];//ans_為最終結果,即最佳生髮效果

sort(q+1,q+m+1,cmp);

s-=lv_w;

if(s > 0)

else

}printf("%.1lf\n",ans_);

}else printf("%lld.0\n",ans[p]);

}}

揹包 01揹包

01揹包 有n種物品與承重為m的揹包。每種物品只有一件,每個物品都有對應的重量weight i 與價值value i 求解如何裝包使得價值最大。dp i,v 表示前i個物體 包括第i個 面對容量為v的揹包的最大價值,c i 代表物體i的重量,w i 代表物體i的價值 如果第i個物體不放入揹包,則揹包...

揹包問題 分數揹包

分數揹包與01揹包問題不同點就是如果某物品無法被全部放入可以放入一部分 思路還是降序排列然後往揹包新增 題目 有 m 元錢,n 種物品 每種物品有 j 磅,總價值 f 元,可以使用 0 到 f 的任意 購買相應磅的物品,例如使用 0.3f 元,可以購買 0.3j 磅物品。要求輸出用 m 元錢最多能買...

揹包 01揹包,完全揹包,多重揹包

哈哈 01揹包 f i v max 完全揹包 f i v max 多重揹包 f i v max include include include include include define maxn 1000 using namespace std int n,cap int w maxn 重量 花...