1023-W专题三

1.题号:1023-W

2.题意:Speakless有n万美元。m个学校都有不同的申请费用a(万美元),并且他得到这个学校offer的可能性b。计算他可以收到至少一份offer的最大概率。

3.思路:这个题是一种反向求解,  至少一个  反过来就是一个也没有,用1减去一个也没有的概率就是至少一个的概率,从而转化为DP问题求解。

4.感想:这个是一种思维方式,不过还是中文题看的比较顺,


AC代码

#include<stdio.h>
#include<iostream>
using namespace std;

double dp[10005],p[10005];
int a[10005];
int main()
{
    int n,i,j,m;
    while(cin>>n>>m)
    {
      if(m==0&&n==0)
          break;
      for(i=1;i<=m;i++)
      {
          cin>>a[i]>>p[i];
          p[i]=1-p[i];  
      }
      for(i=0;i<=n;i++)
        dp[i]=1.0;

          for(i=1;i<=m;i++)
            for(j=n;j>=a[i];j--)
            {  
                if(dp[j]>dp[j-a[i]]*p[i])
                  dp[j]=dp[j-a[i]]*p[i];
            }
              printf("%.1lf%%\n",(1-dp[n])*100);
    }
    return 0;
}


你可能感兴趣的:(1023-W专题三)