守衛者的挑戰
難度級別: c; 程式語言:不限;執行時間限制:1000ms; 執行空間限制:262144kb; **長度限制:2000000b
試題描述
輸入 第一行三個整數 n , l , k 。
第二行n 個實數,第 i 個實數 pi 表示第 i 項挑戰成功的百分比。
第三行n 個整數,第 i 個整數 ai 表示第 i 項挑戰的屬性值.
輸出 乙個整數,表示所求概率,四捨五入保留 6 位小數。
輸入示例
3 1 0
10 20 30
-1 -1 2
輸出示例
0.300000
其他說明
資料範圍:0<=k<=2000,0<=n<=200,-1<=ai<=1000,0<=l<=n,0<=pi<=100.
題目如上。
這道題是學了hzwer才想出來的。一開始在想負數下標的問題還有概率怎麼算,看了之後發現這不是事兒。
先排序一下挑戰,然後dp概率,我們用f[i][j][k]代表參加了i場挑戰贏了j場時有k個空間的概率
,最後累加一下就出來了
資料不小,直接按題目所說定義三維陣列空間不夠,看到n<=200後發現所有大於200的資料可以忽視……
不多說貼**:
1 #include2view codeusing
namespace
std;
3double f[205][205][205
],ans;
4struct hha[205];5
bool
operator
6int
read()710
while(ch>='
0'&&ch<='9')
11return x*f;12}
13int
main()
1418
for (i=1;i<=n;i++) a[i].v=read();
19 sort(a+1,a+n+1);f[0][0][min(k,200)]=1;20
for (i=0;ifor (k=0;k<=i;k++) for (j=0;j<=n;j++)
2126
for (i=0;i<=n;i++) for (j=l;j<=n;j++) ans+=f[n][j][i];
27 printf("
%.6lf
",ans);
28//
system("pause");
29return0;
30 }
期望DP 守衛者的挑戰
擂台賽一共有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 的概率。決策...