今天更完这题结束吧,明天多校爆零ε唉.(这题和前面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;
}
京公网安备 11010502036488号