题意:speakless有n万美元,从m个学校选若干学校,每个学校有一定概率被选上,求最高的概率被至少一个学校选上。
分析:01背包,求被选不上的概率,这样就能知道答案了。
http://acm.hdu.edu.cn/showproblem.php?pid=1203
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
struct hdu1203{
int v;
double prob;
}e[10010];
int main(){
int V,N;
double dp[10010];
while(cin >> V >> N ){
if(V==0 && N==0) break;//注意:这里要求同时为0
for(int i=0;i<10010;i++) //初始化
dp[i]=1.0;
for(int i=1;i<=N;i++)
cin >> e[i].v>>e[i].prob;
for(int i=1;i<=N;i++){
for(int j=V;j>=e[i].v;j--)
dp[j]=min(dp[j],dp[j-e[i].v]*(1-e[i].prob));
}
printf("%.1lf%%\n",(1-dp[V])*100);
}
return 0;
}