 /**//*
如果已经知道走这些passage的顺序的话,应该可以dp出来的
但是这里不确定顺序,要选择最优,可以按照P/Q从大到小排序
遇到匪徒几率Q越小,出去几率P越大,肯定是我们优先考虑的!
Help Bill to find out the probability that he can escape from this castle if he chose the optimal strategy.

dp[i][j]表示现在有钱j,在i个passage处,最后能够出去的概率
dp[n-1,j]=P[n-1]
dp[i,j]=P[i]+Q[i]*dp[i+1,j-1]+(1-P[i]-Q[i])*dp[i+1,j] j>0
dp[i,j]=P[i]+(1-P[i]-Q[i])*dp[i+1,j] j=0

概率题期望题,一般都是表示现在离目标的值
(因为当前接下来的方案确定了,概率也知道了,而当前从前面过来就不确定概率了,其概率跟路径有关)
*/
#include<cstdio>
#include<algorithm>
using namespace std;

struct Pas
  {
double p,q;
bool operator<(const Pas&B)const
 {
return p/q>B.p/B.q;
}
}pas[1010];

double dp[1010][11];

int main()
  {
int n,m,T,t=1;
scanf("%d",&T);
while(T--)
 {
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%lf%lf",&pas[i].p,&pas[i].q);
sort(pas,pas+n);
//mesmet(dp,0,sizeof(dp));
for(int j=0;j<=m;j++)dp[n-1][j]=pas[n-1].p;
for(int i=n-2;i>=0;i--)
 {
dp[i][0]=pas[i].p+(1-pas[i].p-pas[i].q)*dp[i+1][0];
for(int j=1;j<=m;j++)
 {
dp[i][j]=pas[i].p+pas[i].q*dp[i+1][j-1]+(1-pas[i].p-pas[i].q)*dp[i+1][j];
}
}
printf("Case %d: %.5f\n",t++,dp[0][m]);
}
return 0;
}
|
|
常用链接
随笔分类
Links
搜索
最新评论

|
|