前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hdu 1203 I NEED A OFFER!

Hdu 1203 I NEED A OFFER!

作者头像
若羽
发布2019-07-15 16:34:23
2880
发布2019-07-15 16:34:23
举报
文章被收录于专栏:Code思维奇妙屋

题目链接——HDU1203

题意很直观了, 中文题。

至少得到一份offer的概率就等于 1 - 一份offer都得不到的概率。

背包问题 , 求得到offer概率最大,也就是一份都得不到的概率最小。

将每一份offer得不到的概率视为权值 , 重量均为所投offer所用美元

那么dp[i] 就表示用了i美元时 , 得不到offer的最小概率

最终结果就是1 - dp[n]

代码如下:

代码语言:javascript
复制
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <cmath>
 5 #include <iostream>
 6 #include <map>
 7 #include <list>
 8 #include <queue>
 9 #include <stack>
10 #include <string>
11 #include <algorithm>
12 #include <iterator>
13 using namespace std;
14 #define MAXN 10010
15 #define INF 0x3f3f3f3f
16 #define MOD 1000000007
17 #define eps 1e-6
18 #define LL long long
19 double dp[MAXN];
20 int w[MAXN];
21 double v[MAXN];
22 int n , m;
23 void solve()
24 {
25     for(int i = 0; i < m; i ++)
26         scanf("%d %lf",&w[i] , &v[i]);
27     for(int i = 0; i <= n; i ++) dp[i] = 1;
28     for(int i = 0; i < m; i ++)
29         for(int j = n; j >= w[i]; j --)
30             dp[j] = min(dp[j] , dp[j - w[i]] * (1.0 - v[i]));    
31     printf("%.1lf%%\n",(1.0 - dp[n]) * 100);
32 }
33 
34 int main()
35 {
36     while(scanf("%d %d",&n,&m) && (n+m))
37     {
38         solve();
39     }
40     return 0;
41 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-04-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档