【NOIP2013模拟】守卫者的挑战(期望概率)
Description
打開了黑魔法師Vani的大門,隊員們在迷宮般的路上漫無目的地搜尋著關押applepi的監獄的所在地。突然,眼前一道亮光閃過。“我,Nizem,是黑魔法圣殿的守衛者。如果你能通過我的挑戰,那么你可以帶走黑魔法圣殿的地圖……”瞬間,隊員們被傳送到了一個擂臺上,最初身邊有一個容量為K的包包。
擂臺賽一共有N項挑戰,各項挑戰依次進行。第i項挑戰有一個屬性ai,如果ai>=0,表示這次挑戰成功后可以再獲得一個容量為ai的包包;如果ai=-1,則表示這次挑戰成功后可以得到一個大小為1 的地圖殘片。地圖殘片必須裝在包包里才能帶出擂臺,包包沒有必要全部裝滿,但是隊員們必須把 獲得的所有的地圖殘片都帶走(沒有得到的不用考慮,只需要完成所有N項挑戰后背包容量足夠容納地圖殘片即可),才能拼出完整的地圖。并且他們至少要挑戰成功L次才能離開擂臺。
隊員們一籌莫展之時,善良的守衛者Nizem幫忙預估出了每項挑戰成功的概率,其中第i項挑戰成功的概率為pi%。現在,請你幫忙預測一下,隊員們能夠帶上他們獲得的地圖殘片離開擂臺的概率。
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。
.
.
.
.
.
分析
.
.
.
.
.
程序:
#include<iostream> #include<cstdio> using namespace std; double f[201][201][401],p[201],ans=0; int n,l,k,a[201];void check(int x,int y,int z,double w) {if (z>n) z=n;f[x][y][z+200]+=w; }int main() {cin>>n>>l>>k;for (int i=1;i<=n;i++){int x;cin>>x;p[i]=(double)x/100.0;}for (int i=1;i<=n;i++) cin>>a[i];if (k>n) k=n;f[0][0][k+200]=1;for (int i=0;i<n;i++)for (int j=0;j<=i;j++)for (int k=-i;k<=n;k++){check(i+1,j+1,k+a[i+1],p[i+1]*f[i][j][k+200]);check(i+1,j,k,(1-p[i+1])*f[i][j][k+200]);}for (int i=0;i<=n;i++) for (int j=l;j<=n;j++) ans+=f[n][j][i+200];printf("%.6lf",ans);return 0; }轉載于:https://www.cnblogs.com/YYC-0304/p/9499925.html
總結
以上是生活随笔為你收集整理的【NOIP2013模拟】守卫者的挑战(期望概率)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【NOIP2015模拟10.27】魔道研
- 下一篇: 【GDOI2016模拟3.11】历史