1997 守衛者的挑戰

2022-05-03 11:39:24 字數 1348 閱讀 9222

時間限制: 1 s

空間限制: 128000 kb

題目等級 : 鑽石 diamond

題解輸入描述 input description

第一行三個整數n,l,k。

第二行n個實數,第i個實數pi表示第i項挑戰成功的百分比。

第三行n個整數,第i個整數ai表示第i項挑戰的屬性值。

輸出描述 output description

乙個整數,表示所求概率,強制四捨五入保留6位小數。

樣例輸入 sample input

【樣例輸入1】

3 1 0

10 20 30

-1 -1 2

【樣例輸入2】

5 1 2

36 44 13 83 63

-1 2 -1 2 1

樣例輸出 sample output

【樣例輸出1】

0.300000

【樣例輸出2】

0.980387

資料範圍及提示 data size & hint

在第乙個樣例中,若第三項挑戰成功,如果前兩場中某場勝利,隊員們就有空間來容納得到的地圖殘片,如果挑戰失敗,根本就沒有獲得地圖殘片,不用考慮是否能裝下;若第三項挑戰失敗,如果前兩場有勝利,沒有包來裝地圖殘片,如果前兩場都失敗,不滿足至少挑戰成功l次(l = 1)的要求。因此所求概率就是第三場挑戰獲勝的概率。

對於 100% 的資料,保證0≤k≤2000,0≤n≤200,-1≤ai≤1000,0≤l≤n,0≤pi≤100。

分類標籤 tags 點此展開 

動態規劃

揹包型dp

題解:

比較明顯的動態規劃。f[i][j][k]表示前i場已經勝利j場揹包容量為k的概率。k>0代表揹包有j的剩餘空間,k<0代表目前有-j的地圖殘片還未裝入。k的取值範圍是-200~200,超出範圍沒有意義,平移200就好了。 

轉移方式只有兩種:第i次挑戰成功/失敗。 

f[i][j][k]-->f[i+1][j+1][k+a[i]]

或-->f[i+1][j+1][k]

ans=sigma(f[n][l][k])(k>=0)

時間複雜度o(400*n^2)。

ac**:

#includeusing

namespace

std;

#define n 201

intn,l,k,a[n];

double p[n],f[n][n][n<<1

];void modify(int i,int j,int k,double

x)int

main()

1997 守衛者的挑戰

1997守衛者的挑戰 時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題解題目描述description 輸入描述input description 第一行三個整數n,l,k。第二行n個實數,第i個實數pi表示第i項挑戰成功的百分比。第三行n個整數,第i個整數ai表示...

Codevs P1997 守衛者的挑戰

第一行三個整數n,l,k。第二行n個實數,第i個實數pi表示第i項挑戰成功的百分比。第三行n個整數,第i個整數ai表示第i項挑戰的屬性值。乙個整數,表示所求概率,強制四捨五入保留6位小數。樣例輸入1 3 1 0 10 20 30 1 1 2 樣例輸入2 5 1 2 36 44 13 83 63 1 ...

codevs 1997 守衛者的挑戰

表示很遺憾.開始狀態想的沒錯 就是轉移的時候出了問題 自己也想到了陣列平移 然而沒往下寫 與正解擦肩而過 然後為了好轉移寫了個4維的 時間不多了沒來得及降維 草草的算算空間就交了 尼瑪double忘記 8了 華麗的直接memory limit exceeded while compiling 我尼瑪...