題目:
思路:題目描述
監獄的所在地。突然,眼前一道亮光閃過。「我, nizem,是黑魔法聖殿的守衛者。如果你
能通過我的挑戰,那麼你可以帶走黑魔法聖殿的地圖„„」瞬間,隊員們被傳送到了乙個擂
台上,最初身邊有乙個容量為 k 的包包。
擂台賽一共有 n 項挑戰,各項挑戰依次進行。第i 項挑戰有乙個屬性 ai ,如果ai ,
表示這次挑戰成功後可以再獲得乙個容量為 ai 的包包;如果 ai ,則表示這次挑戰成功
後可以得到乙個大小為 1 的地圖殘片。地圖殘片必須裝在包包裡才能帶出擂台,包包沒有
必要全部裝滿,但是隊員們必須把獲得的所有的地圖殘片都帶走(沒有得到的不用考慮,只
需要完成所有 n 項挑戰後揹包容量足夠容納地圖殘片即可),才能拼出完整的地圖。並且他
們至少要挑戰成功 l 次才能離開擂台。
隊員們一籌莫展之時,善良的守衛者 nizem 幫忙預估出了每項挑戰成功的概率,其中
第 i 項挑戰成功的概率為
pi 。現在,請你幫忙**一下,隊員們能夠帶上他們獲得的地圖
殘片離開擂台的概率。
輸入格式
第一行三個整數 n , l , k 。
第二行 n 個實數,第i 個實數 pi 表示第i 項挑戰成功的百分比。
第三行 n 個整數,第i 個整數 ai 表示第i 項挑戰的屬性值.
輸出格式
乙個整數,表示所求概率,四捨五入保留 6 位小數。
樣例輸入 131
0102030-1
-12樣例輸出 1
0.300000樣例輸入 251
2364413
8363-1
2-12
1樣例輸出 2
0.980387
樣例說明
在第乙個樣例中, 若第三項挑戰成功,如果前兩場中某場勝利,隊員們就有空間來容納
得到的地圖殘片,如果挑戰失敗,根本就沒有獲得地圖殘片,不用考慮是否能裝下;若第三
項挑戰失敗,如果前兩場有勝利,沒有包來裝地圖殘片,如果前兩場都失敗,不滿足至少挑
戰成功 l 次(l 1)的要求。因此所求概率就是第三場挑戰獲勝的概率。
資料範圍與約定
對於 100
% 的資料,保證 k , n , ai , l n ,
pi 。
dp。令f[i][j][k]表示前i個挑戰,成功了j項,揹包剩餘k容量的概率。
其中,如果k大於n,則令k等於n。
且k可以為負,處理方法是把k加上n。
轉移方程:
**:f[i+1]
[j+1
][k+w[i+1]
<
2*n?k+w[i+1]
:2*n]+
=f[i]
[j][k]
*p[i+1]
/100.0
;f[i+1]
[j][k]
+=f[i]
[j][k]*(
100-p[i+1]
)/100.0
;
#include
using
namespace std;
#define read(x) scanf("%d",&x)
#define maxn 200
#define maxk 2000
#define db double
int n,m,k;
int p[maxn+5]
,w[maxn+5]
;db f[maxn+5]
[maxn+5]
[2*maxn+5]
;int
main()
else}}
} db ans=0;
for(
int i=m;i<=n;i++
)for
(int j=n;j<=
2*n;j++
) ans+
=f[n]
[i][j]
;printf
("%.6lf"
,ans)
;return0;
}
BZOJ3029 守衛者的挑戰
第一行三個整數n,l,k。第二行n個實數,第i個實數pi表示第i項挑戰成功的百分比。第三行n個整數,第i個整數ai表示第i項挑戰的屬性值.乙個整數,表示所求概率,四捨五入保留6 位小數。樣例輸入1 3 1 0 10 20 30 1 1 2 樣例輸入2 5 1 2 36 44 13 83 63 1 2...
bzoj 3029 守衛者的挑戰 概率dp
有n個位置,每個位置有乙個權值ai,若ai 0則ai必為 1,且有pi的概率獲得這個值。初始值為k。現在問至少獲得了l個值且獲得的值的和不小於0的概率。n 200,l n,ai,k 2000 設f i,j,k 表示到第i個位置,拿了j個值,當前和為k的概率。顯然若當前的值大於n的話就一定可以滿足和不...
BZOJ3029 守衛者的挑戰 期望DP
time limit 2 sec memory limit 128 mb submit status discuss 的地圖殘片。地圖殘片必須裝在包包裡才能帶出擂台,包包沒有必要全部裝滿,但是隊員們必須把 獲得的所有的 地圖殘片都帶走 沒有得到的不用考慮,只需要完成所有n項挑戰後揹包容量足夠容納地圖...