dp[ i ][ j ]:表示從前 i 家銀行中搶劫某些家,得到 j 價值 而不被抓住的概率。
dp[ j ]=max( dp[ j ],dp[ j - val[ i ] ]*( 1-w[ i ] ) ) );
將全部銀行的錢當做揹包的最大體積
那麼每家銀行的錢則當做物品的體積
那麼被抓的概率當做物品的價值
那麼便容易推出我們所需要的動態方程:
dp[i]=max(dp[i],(dp[i-money]*(1-rp))); // money 當前銀行錢,rp 當前被抓概率
#include
#include
using namespace std;
double dp[10050];
int money[10050],sum,n;
double rp[10050];
int main()
dp[0]=1;
for(i=0;i
}for(i=sum;i>=0;i--)}}
// system("pause");
return 0;
}
hdu 2955 0 1揹包變形
題目大意 劫匪搶銀行,要求被抓概率小於p。共有n個銀行,第i個銀行錢數為m i 被抓概率為p i float型 求劫匪最多能搶多少錢 思路 由於代價 被抓概率 是浮點型且不能直接相加,所以不能以代價為揹包。這個題目可以以獲得的價值 即搶到的錢數 為揹包,求搶到一定錢時逃跑的概率 雖然搶到的錢數不是連...
hduoj 2955 01揹包變形,動態規劃
這道題關於概率的部分我理解了。另一點就是轉化成01揹包的問題。我是這麼想的。01揹包dp時是求在一定容量下的最大價值。這道題dp時是求獲得一定金錢時的最大逃跑概率。感覺和01揹包還是有一點差別。雖然 寫起來很像。先記錄在這裡。希望有一天能夠徹底的理解這個問題。附上 include include i...
HDU 3466 01揹包變形
給出物品數量n和總錢數m 對於n個物品。每乙個物品有其花費p i 特殊值q i 價值v i q i 表示當手中剩餘的錢數大於q i 時,才幹夠買這個物品 首先對n個物品進行 q p的排序,表示差額最小的為最優。優先考慮放入這個物品 然後01揹包計算 include stdio.h include s...