守衛者的挑戰 據說在bzoj有但我沒找到

2022-05-23 15:51:06 字數 741 閱讀 4252

芒果君:一看就是概率dp(可是我不會啊,就算再裸也不會啊)。然後先從最後想,能夠滿足題意的狀態是 挑戰次數》=l,獲得價值》=0,那一定有f[總挑戰數i][挑戰成功數j][價值k]。轉移很好寫,無非兩種情況,成功和不成功。不成功,i+1,其他不變,值*(1-p[i]);成功,i+1,j+1,k+w,值是 ∑各種情況*p[i]。題目中有個關鍵資訊是n<=200,也就是說極限情況是200* ±1,我們只需要開200*2的陣列,將負數移個位。空間炸了怎麼辦,滾一滾啊。

1 #include2 #include3 #include4

using

namespace

std;

5double ans,p[210],f[2][210][410];6

intn,t,m,w;

7int

main()818

for(int i=t;i<=n;++i) for(int j=n;j<=(n<<1);++j) ans+=f[n&1

][i][j];

19 printf("

%.6lf\n

",ans);

20return0;

21 }

守衛者的挑戰

題目描述 隊員們被傳送到了乙個擂台上,最初身邊有乙個容量為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的時候,無論怎麼樣,揹包空...