杭電2955題解(01揹包)

2021-09-12 18:19:33 字數 642 閱讀 7881

題目大意:小偷去銀行偷錢,每個銀行給出能被偷的錢數和小偷在此銀行會被抓的概率。

算出小偷不會被抓時能偷到的錢。給出小偷會被抓的概率r,在銀行被抓的總概率不能超過此概率。

題解:以能偷到的錢為揹包容量,以不會被抓的概率為物品價值,需要注意揹包恰好裝滿,

而且概率是用乘法,給出的測試資料有點坑。標準01揹包。輸出物品價值超過不會被抓概率(1-r)時的揹包容量.注意偷不到錢時被抓概率為0.

#include

#include

#include

using namespace std;

double dp[

10005];

int main()

dp[0]

=1; double p;

int n,sum=0;

scanf

("%lf%d"

,&p,

&n);

p=1-p;

int a[n]

; double b[n]

;for

(int i=

0;i)for

(int i=

0;ifor(int i=sum;i>=

0;i--)}

}}

杭電 2546 飯卡 01揹包

解題思路 先忽略飯卡餘額大於等於5塊才能買飯這一細節,需要求的是飯卡裡面剩餘的錢最少,轉化一下,變成花的錢最多,那麼剩下的錢就最少,再考慮餘額大於等於5塊才能買飯這一細節,可以這樣想,如果卡里的餘額不足5塊,那麼買不到飯,直接輸出現在卡里的金額,如果卡里的錢多於5塊,我們就可以先將這5塊錢留起來,這...

hdu 2955 Robberies 01揹包變形

include include include include double f 10001 double maxn double maxs double a,double b int main for i m i 0 i if f i maxn 1e 12 break printf d n i r...

題解 01揹包

描述 乙個旅行者有乙個最多能裝 m 公斤的揹包,現在有 n 件物品,它們的重量分別是w1,w2,wn,它們的價值分別為c1,c2,cn,求旅行者能獲得最大總價值。輸入第一行 兩個整數,m 揹包容量,m 200 和n 物品數量,n 30 第2 n 1行 每行二個整數wi,ci,表示每個物品的重量和價值...