JZOJ3386 守衛者的挑戰

2022-06-09 15:42:10 字數 1295 閱讀 2348

description

input

第一行三個整數n,l,k。

第二行n個實數,第i個實數pi表示第i項挑戰成功的百分比。

第三行n個整數,第i個整數ai表示第i項挑戰的屬性值.

output

乙個整數,表示所求概率,四捨五入保留6 位小數。

sample input

樣例輸入1

3 1 0

10 20 30

-1 -1 2

樣例輸入2

5 1 2

36 44 13 83 63

-1 2 -1 2 1

sample output

樣例輸出1

0.300000

樣例解釋:

若第三項挑戰成功,如果前兩場中某場勝利,隊員們就有空間來容納得到的地圖殘片,如果挑戰失敗,根本就沒有獲得地圖殘片,不用考慮是否能裝下;

若第三項挑戰失敗,如果前兩場有勝利,沒有包來裝地圖殘片,如果前兩場都失敗,不滿足至少挑戰成功l次(l=1)的要求。因此所求概率就是第三場挑戰獲勝的概率。

樣例輸出2

0.980387

data constraint

對於 100% 的資料,保證0<=k<=2000,0<=n<=200,-1<=ai<=1000,0<=l<=n,0<=pi<=100。

dp,f[i][j][k]表示進行到第i場比賽時,揹包容量為j,勝了k場,轉移:

失敗:f[i][j][k]=f[i][j][k]+f[i-1][j][k]*(1-a[i]/100)

勝利:f[i][j+p[i]][k+1]=f[i][j+p[i]][k+1]+f[i-1][j][k]*(a[i]/100);

注意揹包範圍和初始揹包容量

1 #include2

using

namespace

std;

3double f[201][401][200],a[201];4

int n,k,p[201

],l;

5int

main()621

double ans=0;22

for (int i=200-k;i<=400;i++)

23for (int j=l;j<=n;j++)

24 ans=ans+f[n][i][j];

25 printf("

%lf"

,ans);

26 }

view code

jzoj 3386 守衛者的挑戰

description 擂台賽一共有n項挑戰,各項挑戰依次進行。第i項挑戰有乙個屬性ai,如果ai 0,表示這次挑戰成功後可以再獲得乙個容量為ai的包包 如果ai 1,則表示這次挑戰成功後可以得到乙個大小為1 的地圖殘片。地圖殘片必須裝在包包裡才能帶出擂台,包包沒有必要全部裝滿,但是隊員們必須把 獲...

守衛者的挑戰

題目描述 隊員們被傳送到了乙個擂台上,最初身邊有乙個容量為k的包包。擂台賽一共有項挑戰,各項挑戰依次進行。第項挑戰有乙個屬性ai,如果ai 0,表示這次挑戰成功後可以再獲得乙個容量為ai的包包 如果ai 1,則表示這次挑戰成功後可以得到乙個大小為1的地圖殘片。地圖殘片必須裝在包包裡才能帶出擂台,包包...

守衛者的挑戰

初始值為 k 現經過一段數,有 p i 的概率加上第 i 個數 a i 問最後值 geq0 且加了 l 個數的概率。注意到 k 200 都是沒有意義的,於是可以把 k 的範圍視為 0 leq k leq200 直接設 f i j k 表示處理了第 1 i 個數,加了 j 個數,值為 k 的概率。決策...