joyoi1864 守卫者的挑战

#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
int n, l, k;
double dp[205][205][205], ans;//pass [] gates, win [] games, with size[]
struct Node{
	double p;
	int a;
}nd[205];
bool cmp(Node x, Node y){
	return x.a>y.a;
}
int main(){
	cin>>n>>l>>k;
	for(int i=1; i<=n; i++){
		scanf("%lf", &nd[i].p);
		nd[i].p /= 100.0;
	}
	for(int i=1; i<=n; i++)
		scanf("%d", &nd[i].a);
	sort(nd+1, nd+1+n, cmp);
	dp[0][0][min(k,n)] = 1.0;
	for(int i=1; i<=n; i++)
		for(int j=0; j<i; j++)
			for(int o=0; o<=n; o++){
				dp[i][j][o] += dp[i-1][j][o] * (1.0 - nd[i].p);
				int t=o+nd[i].a;
				if(t<0)	continue;
				if(t>n)	t = n;
				dp[i][j+1][t] += dp[i-1][j][o] * nd[i].p;
			}
	for(int i=l; i<=n; i++)
		for(int j=0; j<=n; j++)
			ans += dp[n][i][j];
	printf("%.6f\n", ans);
	return 0;
}
posted @ 2018-03-13 19:33  poorpool  阅读(91)  评论(0编辑  收藏  举报