HDU - 1203 I NEED A OFFER!(01背包)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU - 1203 I NEED A OFFER!(01背包)相关的知识,希望对你有一定的参考价值。
题意:Speakless,给定他所攒的钱n,若干个学校的申请费用和可能拿到offer的概率。求Speakless可能得到至少一份offer的最大概率。
这个问题就和hdu2955差不多,dp里面储存至少一份offer的最大概率,求的时候先转化成拿不到概率相乘,在用1减去。
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 const int maxn=10010; 5 double dp[maxn],value[maxn]; 6 int cost[maxn]; 7 8 int main(){ 9 int m,n; 10 while(scanf("%d %d",&m,&n)!=EOF){ 11 if(m==0&&n==0) break; 12 for(int i=1;i<=n;i++){ 13 scanf("%d %lf",&cost[i],&value[i]); 14 } 15 memset(dp,0,sizeof(dp));//初始化 16 for(int i=1;i<=n;i++){ 17 for(int j=m;j>=cost[i];j--){ 18 dp[j]=max(dp[j],1-((1-dp[j-cost[i]])*(1-value[i])));//求概率,先转化成拿不到的概率再用1减去m,dp里面就储存至少一份offer的最大概率 19 } 20 } 21 printf("%.1f%%\n",dp[m]*100); 22 } 23 return 0; 24 }
以上是关于HDU - 1203 I NEED A OFFER!(01背包)的主要内容,如果未能解决你的问题,请参考以下文章
HDU - 1203 I NEED A OFFER!(01背包)
I NEED A OFFER! (hdu 1203 01背包)