【期望】守卫挑战(金牌导航 期望-9)
生活随笔
收集整理的這篇文章主要介紹了
【期望】守卫挑战(金牌导航 期望-9)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
守衛挑戰
金牌導航 期望-9
題目大意
有n個數,到第i個數,有p_i的概率選擇這個數,問你最后選了最少L個數,且選的數的和再加k大于等于0
樣例輸入
3 1 0 10 20 30 -1 -1 2樣例輸出
0.300000數據范圍
0?k?20000\leqslant k\leqslant 20000?k?2000
0?L?n?2000\leqslant L \leqslant n\leqslant 2000?L?n?200
?1?ai?1000-1\leqslant a_i\leqslant 1000?1?ai??1000
0?pi?1000\leqslant p_i \leqslant 1000?pi??100
解題思路
設fi,j,kf_{i,j,k}fi,j,k?為前i個數,選了j個,且數的和為k的期望值
那么有:
fi,j,k=fi?1,j,k×(1?pi)f_{i,j,k} = f_{i - 1,j,k} \times (1 - p_i)fi,j,k?=fi?1,j,k?×(1?pi?)
fi,j,k+=fi?1,j?1,k?a[i]×pif_{i,j,k} += f_{i - 1,j - 1,k - a[i]} \times p_ifi,j,k?+=fi?1,j?1,k?a[i]?×pi?
直接dp即可
代碼
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #define g(x) (x + 200)//使所有數大于0方便存儲 #define max(x, y) ((x)>(y)?(x):(y)) using namespace std; int n, l, K, a[210]; double ans, p[210], f[210][210][450]; int main() {scanf("%d%d%d", &n, &l, &K);for (int i = 1; i <= n; ++i){scanf("%lf", &p[i]);p[i] /= 100.0;}for (int i = 1; i <= n; ++i)scanf("%d", &a[i]);f[0][0][g(K)] = 1.0;for (int i = 1; i <= n; ++i)for (int j = 0; j <= i; ++j){for (int k = -200; k <= 200; ++k){f[i][j][g(k)] = f[i - 1][j][g(k)] * (1.0 - p[i]);if (j > 0 && -200 <= k - a[i] && k - a[i] <= 200) f[i][j][g(k)] += f[i - 1][j - 1][g(k - a[i])] * p[i]; //dp}for (int k = max(-200, 200 - a[i]); k <= 200; ++k)f[i][j][401] += f[i - 1][j - 1][g(k)] * p[i];//高于200的不可能再變成負數,就計算到一起f[i][j][401] += f[i - 1][j][401];}for (int i = l; i <= n; ++i)for (int j = 0; j <= 201; ++j)ans += f[n][i][g(j)];//計算結果printf("%.6lf", ans);return 0; }總結
以上是生活随笔為你收集整理的【期望】守卫挑战(金牌导航 期望-9)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Canalys:第三季度全球智能手机市场
- 下一篇: 一篇超级详细的鱼缸制作过程大型鱼缸制作过