守衛者的挑戰

2022-05-08 01:27:07 字數 1044 閱讀 1011

初始值為\(k\),現經過一段數,有\(p_i\)的概率加上第\(i\)個數\(a_i\)。問最後值\(\geq0\)且加了\(l\)個數的概率。

注意到\(k>200\)都是沒有意義的,於是可以把\(k\)的範圍視為\(0\leq k\leq200\)。

直接設\(f[i][j][k]\)表示處理了第\(1-i\)個數,加了\(j\)個數,值為\(k\)的概率。

決策就是是否加上這個數。

為了防止第三維變負,\(k+=200\),空間要開到\(400\)。

注意到因為\(double\)有\(8\)位元組,\(128mb\)下該陣列會導致\(mle\)。

滾掉第一維即可。

複雜度\(o(n^3)\)(\(n,k\)同階)。

#include#include#include#include#include#include#include#define re register

#define il inline

#define ll long long

#define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)<(b)?(a):(b))

#define fp(i,a,b) for(re int i=a;i<=b;i++)

#define fq(i,a,b) for(re int i=a;i>=b;i--)

using namespace std;

const int mod=1e9+7,n=1e6+100;

int n,l,k,sum;

long double dp[2][205][410],ans;

struct chaa[n];

il ll gi()

il int del(re int x)

int main()

} printf("%.6lf\n",dp[now][0][k]);

fclose(stdin);

fclose(stdout);

return 0;

}

守衛者的挑戰

題目描述 隊員們被傳送到了乙個擂台上,最初身邊有乙個容量為k的包包。擂台賽一共有項挑戰,各項挑戰依次進行。第項挑戰有乙個屬性ai,如果ai 0,表示這次挑戰成功後可以再獲得乙個容量為ai的包包 如果ai 1,則表示這次挑戰成功後可以得到乙個大小為1的地圖殘片。地圖殘片必須裝在包包裡才能帶出擂台,包包...

守衛者的挑戰

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

守衛者的挑戰

守衛者的挑戰 試題描述 輸入第一行三個整數 n l k 第二行n 個實數,第 i 個實數 pi 表示第 i 項挑戰成功的百分比。第三行n 個整數,第 i 個整數 ai 表示第 i 項挑戰的屬性值.輸出乙個整數,表示所求概率,四捨五入保留 6 位小數。輸入示例 3 1 0 10 20 30 1 1 2...