hdu 1203 01背包
注意,求的是最大的概率,所以先求出不能被录取的最小的概率p,然后直接1-p即可
WA了两次
原因:初始化的时候dp[0]没有赋值
#include<stdio.h> #include<string.h> double dp[10010]; int a[1010]; double b[1010]; double min(double a,double b) { return a<b?a:b; } int main() { int n,m,i,j,k; while(scanf("%d%d",&n,&m),(n||m)) { for(i=1;i<=m;i++) scanf("%d%lf",&a[i],&b[i]); for(i=0;i<=10000;i++) dp[i]=1.0; for(i=1;i<=m;i++) for(j=n;j>=a[i];j--) dp[j]=min(dp[j],dp[j-a[i]]*(1.0-b[i])); printf("%.1lf%%\n",(1.0-dp[n])*100.0); } return 0; }