時間限制: 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**:
#includeusingnamespace
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 我尼瑪...