今天更完这题结束吧,明天多校爆零ε唉.(这题和前面3个题目.
然后打多校的时候,每天更一篇就好了...4天结束数论.
这题是个概率题,很简单的maybe.题目意思啥的都不解释了.
直接上代码:
#include <bits/stdc++.h> using namespace std; const int N=205; double dp[N][N][N<<1];//到了第几次,赢了几次,背包容量为多少. double p[N]; int a[N]; int n,l,k;//n次比赛,至少赢l次,初始有k的包包. int f(int x) { x=min(x,n);//节省容量. return x+200;//防止负数出现 } int main() { cin>>n>>l>>k; dp[0][0][f(k)]=1.0; for(int i=1;i<=n;i++) { cin>>p[i]; p[i]/=100.0; } for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) { for(int j=0;j<=i;j++) { for(int k=1-i;k<=n;k++) { dp[i][j][f(k+a[i])]+=dp[i-1][j-1][f(k)]*p[i]; dp[i][j][f(k)]+=dp[i-1][j][f(k)]*(1-p[i]); } } } double ans=0.0; for(int i=l;i<=n;i++) { for(int j=0;j<=n;j++) { ans+=dp[n][i][f(j)]; } } printf("%.6lf\n",ans); return 0; }