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背包)

I NEED A OFFER! HDU - 1203

HDU 1203 I NEED A OFFER!

hdu1203--D - I NEED A OFFER!(转化01背包)

HDU 1203 I NEED A OFFER!(0-1背包)