记录编号 469982 评测结果 AAAAAAAAAA
题目名称 [Nescafé 17] 守卫者的挑战 最终得分 100
用户昵称 GravatarShirry 是否通过 通过
代码语言 C++ 运行时间 0.167 s
提交时间 2017-11-04 00:23:30 内存使用 124.20 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=201;
int n,l,t,a[maxn];
double f[maxn][maxn][maxn<<1],p[maxn];//前i场比赛胜了j场,背包容量为k的概率
int main(){
	freopen("guarda.in","r",stdin);
	freopen("guarda.out","w",stdout);
	scanf("%d%d%d",&n,&l,&t);
	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]);
	if(t>n)t=n;
	f[0][0][t+200]=1;
	for(int i=0;i<n;i++)
		for(int j=0;j<=i;j++)
			for(int k=-i;k<=n;k++){//k<0表示当前还有-k块残片未装入
				f[i+1][j+1][min(n,k+a[i+1])+200]+=p[i+1]*f[i][j][k+200];
				f[i+1][j][k+200]+=(1.0-p[i+1])*f[i][j][k+200];
			}
	double ans=0;
	for(int k=0;k<=n;k++)
		for(int j=l;j<=n;j++)
			ans+=f[n][j][k+200];
	printf("%.6lf\n",ans);
	return 0;
}