日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[HNOI2015]亚瑟王

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [HNOI2015]亚瑟王 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

小 K 不慎被 LL 邪教洗腦了,洗腦程度深到他甚至想要從亞瑟王邪教中脫坑。他決定,在脫坑之前,最后再來打一盤亞瑟王。既然是最后一戰,就一定要打得漂亮。眾所周知,亞瑟王是一個看臉的游戲,技能的發動都是看概率的。

作為一個非洲人,同時作為一個前 OIer,小 K 自然是希望最大化造成傷害的期望值。但他已經多年沒寫過代碼,連 Spaly都敲不對了,因此,希望你能幫幫小 K,讓他感受一下當歐洲人是怎樣的體驗。

本題中我們將考慮游戲的一個簡化版模型。 玩家有一套卡牌,共 n張。游戲時,玩家將 n 張卡牌排列成某種順序,排列后將卡牌按從前往后依次編號為 1 ~ n。本題中,順序已經確定,即為輸入的順序。每張卡牌都有一個技能。第 i 張卡牌的技能發動概率為 pi,如果成功發動,則會對敵方造成di點傷害。也只有通過發動技能,卡牌才能對敵方造成傷害。基于現實因素以及小K非洲血統的考慮,pi不會為 0,也不會為 1,即 0 < pi < 1。 一局游戲一共有 r 輪。在每一輪中,系統將從第一張卡牌開始,按照順序依次考慮每張卡牌。在一輪中,對于依次考慮的每一張卡牌:

1如果這張卡牌在這一局游戲中已經發動過技能,則

1.1 如果這張卡牌不是最后一張,則跳過之(考慮下一張卡牌); 否則(是最后一張),結束這一輪游戲。

2否則(這張卡牌在這一局游戲中沒有發動過技能),設這張卡牌為第 i 張

2.1將其以 pi的概率發動技能。

2.2如果技能發動,則對敵方造成 di點傷害,并結束這一輪。

2.3如果這張卡牌已經是最后一張(即 i 等于n),則結束這一輪;否則,考慮下一張卡牌。

請幫助小 K 求出這一套卡牌在一局游戲中能造成的傷害的期望值。

輸入輸出格式

輸入格式:

?

輸入文件的第一行包含一個整數 T,代表測試數據組數。 接下來一共 T 組數據。 每組數據的第一行包含兩個用空格分開的整數 n和r,分別代表卡牌的張數和游戲的輪數。 接下來 n行,每行包含一個實數和一個整數,由空格隔開,描述一張卡牌。第i 行的兩個數為 pi和 di,分別代表第 i 張卡牌技能發動的概率(實數)和技能發動造成的傷害(整數)。保證 pi最多包含 4位小數,且為一個合法的概率。

?

輸出格式:

?

對于每組數據,輸出一行,包含一個實數,為這套卡牌在這一局游戲中造成的傷害的期望值。對于每一行輸出,只有當你的輸出和標準答案的相對誤差不超過10^-8時——即|a-o|/a<=10-8時(其中a是標準答案,o是輸出),你的輸出才會被判為正確。建議輸出10 位小數。

?

輸入輸出樣例

輸入樣例#1:?
1 3 2 0.5000 2 0.3000 3 0.9000 1 輸出樣例#1:?
3.2660250000

說明

一共有 13 種可能的情況:

  • 第一輪中,第 1張卡牌發動技能;第二輪中,第 2張卡牌發動技能;
  • 概率為 0.15,傷害為5。

  • 第一輪中,第 1張卡牌發動技能;第二輪中,第 3張卡牌發動技能;
  • 概率為 0.315,傷害為3。

  • 第一輪中,第 1張卡牌發動技能;第二輪不發動技能;
  • 概率為 0.035,傷害為2。

  • 第一輪中,第 2張卡牌發動技能;第二輪中,第 1張卡牌發動技能;
  • 概率為 0.075,傷害為5。

  • 第一輪中,第 2張卡牌發動技能;第二輪中,第 3張卡牌發動技能;
  • 概率為 0.0675,傷害為4。

  • 第一輪中,第 2張卡牌發動技能;第二輪不發動技能;
  • 概率為 0.0075,傷害為3。

  • 第一輪中,第 3張卡牌發動技能;第二輪中,第 1張卡牌發動技能;
  • 概率為 0.1575,傷害為3。

  • 第一輪中,第 3張卡牌發動技能;第二輪中,第 2張卡牌發動技能;
  • 概率為 0.04725,傷害為4。

  • 第一輪中,第 3張卡牌發動技能;第二輪不發動技能;
  • 概率為 0.11025,傷害為1。

  • 第一輪不發動技能;第二輪中,第 1張卡牌發動技能;
  • 概率為 0.0175,傷害為2。

  • 第一輪不發動技能;第二輪中,第 2張卡牌發動技能;
  • 概率為 0.00525,傷害為3。

  • 第一輪不發動技能;第二輪中,第 3張卡牌發動技能;
  • 概率為 0.011025,傷害為1。

  • 第一輪不發動技能;第二輪亦不發動技能;
  • 概率為 0.001225,傷害為0。

    造成傷害的期望值為概率與對應傷害乘積之和,為 3.266025。

    對于所有測試數據, 1 <= T <= 444, 1 <= n <= 220, 0 <= r <= 132, 0 < pi < 1, 0 <= di <= 1000。

    除非備注中有特殊說明,數據中 pi與di均為隨機生成。

    請注意可能存在的實數精度問題,并采取適當措施。

    ?

    突破點就是在編號小的優先級總是更大的,所以我們可以第一維枚舉考慮了前幾小的編號,第二維枚舉還剩多少局沒有匹配卡牌。

    #include<bits/stdc++.h> #define ll long long #define D double using namespace std; D f[225][141],ans; D p[225],R,P[225][141]; int T,n,r,d[225]; // f[i][j] 表示到了考慮 i 的時候, //還有j局沒有輸出的概率。 //P[i][j] 表示i在j局后還沒有被選的概率 inline void dp(){for(int i=1;i<=n;i++){P[i][0]=1;for(int j=1;j<=r;j++) P[i][j]=P[i][j-1]*(1-p[i]);}f[1][r]=1,ans+=d[1]*(1-P[1][r]);for(int i=2;i<=n;i++){R=0;for(int j=max(0,r-i+1);j<=r;j++){f[i][j]=f[i-1][j]*P[i-1][j];if(j<r) f[i][j]+=f[i-1][j+1]*(1-P[i-1][j+1]);R+=f[i][j]*(1-P[i][j]);}ans+=R*d[i];} }int main(){scanf("%d",&T);while(T--){ans=0,scanf("%d%d",&n,&r);for(int i=1;i<=n;i++) scanf("%lf%d",p+i,d+i);memset(f,0,sizeof(f)),memset(P,0,sizeof(P)),dp();printf("%.10lf\n",ans);}return 0; }

      

    ?

    轉載于:https://www.cnblogs.com/JYYHH/p/8549862.html

    總結

    以上是生活随笔為你收集整理的[HNOI2015]亚瑟王的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。