http://acm.hdu.edu.cn/showproblem.php?pid=1203

 

分析:题中有两个字“至少”,所以我们可以选择算一个也不可能的概率为多少,再用1减去它,即可获得所要答案。

 

 

 

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#include <iostream>
#include<algorithm>
#include<queue>
#define maxn 11000
#define oo 0x3f3f3f3f
using namespace std;
int a[maxn];
double b[maxn],dp[maxn];

int main()
{
    int n, m;

    while(scanf("%d %d", &n, &m),n+m)
    {
        for(int i=1; i<=m; i++)
        {
             scanf("%d %lf", &a[i], &b[i]);
             b[i] = 1-b[i];
        }


        for(int i=0; i<=n; i++)
           dp[i] = 1;

       for(int i=1; i<=m; i++)
       {
           for(int j=n; j>=a[i]; j--)
           {
               dp[j]=min(dp[j], dp[j-a[i]]*b[i]);
           }
       }


      printf("%.1f%%\n", (1-dp[n])*100);
    }
    return 0;
}
View Code

 

posted on 2016-08-04 11:02  不忧尘世不忧心  阅读(117)  评论(0编辑  收藏  举报