YBTOJ 守衛挑戰

2022-06-13 13:48:08 字數 694 閱讀 7299

有 \(n\) 項任務,有乙個數 \(k\)。每一項任務成功的概率是 \(p_i\)(這裡與原題目不同,原題目是百分之 \(p'_i\),這裡相當於 \(p_i=\frac\)),成功後會使 \(k\) 加上 \(a_i\)。問至少成功 \(l\) 次且最後 \(k\leq0\) 的概率是多少。

資料範圍:\(0\leq k\leq2000,0\leq l\leq n\leq 200,-1\leq a_i\leq1000,0\leq p_i\leq100\)。

這道題 \(k\leq2000\) 很搞人,但是我們發現其實 \(k\) 至多到 \(200\)。畢竟 \(a_i\) 最少是 \(-1\),就是最多加上 \(n\) 個 \(-1\) 才會對結果有影響。那麼我們確定了 \(k\) 最終的範圍:\(-200\leq k\leq200\)。

搞定 \(k\) 以後,我們設 \(f_\) 表示前 \(i\) 個任務成功了 \(j\) 個當前的 \(k\) 為 \(k\) 的概率。

得到轉移方程:

\[f_=f_\cdot(1-p_i)+f_\cdot p_i

\]很明顯,\(f_=1\)。

double f[n][n][n * 2];

int a[n];

double p[n], ans;

int n, l, k;

int main()

守衛者的挑戰

題目描述 隊員們被傳送到了乙個擂台上,最初身邊有乙個容量為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 的概率。決策...

守衛者的挑戰

開始就想到了用乙個三維的f陣列表示第i場,贏了幾場,還剩下多少空間,但是發現空間的極限最大值是200000,在開乙個三維的陣列就爆記憶體了,後來想到用map實現動態開點,但是這樣時間複雜度過不了,並且還表示不了贏了多少場的狀態,後來參考了一下題解,發現當揹包的空間加到大於n的時候,無論怎麼樣,揹包空...