http://acm.hdu.edu.cn/showproblem.php?pid=1203
求对立事件。求一份也没收到的最小概率。
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
double dp[10010],w[10010];
int cost[10010];
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m))
{
if(n == 0 && m == 0) break;
for(int i = 1; i <= m; i++)
scanf("%d %lf",&cost[i],&w[i]);
for(int i = 0; i <= n; i++)
dp[i] = 1.0;
for(int i = 1; i <= m; i++)
{
for(int j = n; j >= cost[i]; j--)
{
dp[j] = min(dp[j],dp[j-cost[i]]*(1-w[i]));
}
}
printf("%.1lf%%\n",(1-dp[n])*100);
}
return 0;
}