I NEED A OFFER!
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 16705    Accepted Submission(s): 6660

Problem Description
Speakless非常早就想出国,如今他已经考完了全部须要的考试,准备了全部要准备的材料,于是,便须要去申请学校了。要申请国外的不论什么大学,你都要交纳一定的申请费用,这但是非常惊人的。Speakless没有多少钱,总共仅仅攒了n万美元。他将在m个学校中选择若干的(当然要在他的经济承受范围内)。每一个学校都有不同的申请费用a(万美元),而且Speakless预计了他得到这个学校offer的可能性b。不同学校之间是否得到offer不会互相影响。“I NEED A OFFER”,他大叫一声。帮帮这个可怜的人吧,帮助他计算一下,他能够收到至少一份offer的最大概率。(假设Speakless选择了多个学校,得到随意一个学校的offer都能够)。
 
Input
输入有若干组数据,每组数据的第一行有两个正整数n,m(0<=n<=10000,0<=m<=10000) 
后面的m行,每行都有两个数据ai(整型),bi(实型)分别表示第i个学校的申请费用和可能拿到offer的概率。 
输入的最后有两个0。
 
Output
每组数据都相应一个输出,表示Speakless可能得到至少一份offer的最大概率。用百分数表示,精确到小数点后一位。
 
Sample Input
10 3
4 0.1
4 0.2
5 0.3
0 0
 
Sample Output

44.0%

Hint

You should use printf("%%") to print a '%'.
 
Author

Speakless

题目大意:Speakless有N万元,他要申请学校上学。总共同拥有M个学校可申请,

每一个学校都有申请费和申请概率,求他最少能获得一个学校名额的概率最大

为多大

思路:动态规划,用01背包做。须要注意概率的算法。至少申请上一个学校的

概率 = 1-(1-p1)(1-p2)(1-p3)… 当中,p1,p2,p3…为各个学校申请概率。

将N元当做背包总容量,学校当做物品。申请费为体积,不被申请上的概率当

做价值,转移方程就为 dp[j] = min(dp[j],dp[j-w[i]]*p[i]);

终于算得的dp[N]为Speakless有N万元,没有被不论什么学校申请的概率最大为dp[j]。

那么,终于结果为1 - dp[N]。

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;int w[10010];
double p[10010],dp[10010];
int main()
{int N,M;while(~scanf("%d%d",&N,&M) && (N!=0 || M!=0)){for(int i = 0; i < M; i++){scanf("%d%lf",&w[i],&p[i]);p[i] = 1-p[i];//不给offer概率}for(int i = 0; i <= N; i++)dp[i] = 1;//概率最大为1for(int i = 0; i < M; i++){for(int j = N; j >= w[i]; j--){dp[j] = min(dp[j],dp[j-w[i]]*p[i]);}}dp[N] = 1- dp[N];printf("%.1lf%%\n",dp[N]*100);}return 0;
}

HDU1203_I NEED A OFFER!【01背包】相关推荐

  1. HDU 1203 I NEED A OFFER! (动态规划、01背包、概率)

    I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. 杭电1203--I NEED A OFFER!(01背包)

    I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. 浅说——九讲背包之01背包

    所谓九讲,也就是: 0/1背包 0/1背包降维 完全背包 多重背包(二进制优化) 混合背包 二维费用背包 分组背包 有依赖的背包 背包的方案总数\背包的具体方案路径 0/1背包: [问题描述](经典) ...

  4. Codeforces Round #104 (Div. 2) E DP(01背包模型) +组和+除法取模求逆元

    题意: 规定只包含4或7的数为幸运数字,给定n个数的序列,求他的子序列,使得该子序列的长度为k并且满足该子序列中不存在相同的两个幸运数字.问一共寻在多少种可能.(只要该数的下标不同则认为是不同的序列) ...

  5. 最小邮票数(01背包)

    题目描述 有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值.     如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分.3分.4分即可. 输入描述: 有多组数 ...

  6. NYOJ 860 又见01背包

    有n个重量和价值分别为wi 和 vi 的 物品,从这些物品中选择总重量不超过 W  的物品,求所有挑选方案中物品价值总和的最大值. 1 <= n <=100 1 <= wi < ...

  7. 背包问题(多重背包+0-1背包)

    一:0-1背包问题 #include<iostream> #include<algorithm> #include<cstring> const int maxn= ...

  8. 背包模型dp1:01背包,完全背包,多重背包的两大优化的详解

    01背包问题: 状态表示:f[i][j]表示从只从前i个物体里面选,切总体积不超过j的选法的集合状态表示:f[i][j]表示从只从前i个物体里面选,切总体积不超过j的选法的集合状态表示:f[i][j] ...

  9. CF3B Lorry (手动模拟01背包,贪心)难度⭐⭐⭐

    这道题洛谷上的翻译是错的,最后输出格式那里应该是输出一行所选物品的编号,中间用空格隔开 手动模拟01背包 这道题看上去很像是01背包的模板题,但是很明显,v=1e9,正常的01背包是肯定会爆掉62MB ...

最新文章

  1. 第一章计算机基础知识第一节,第一章 计算机基础知识 第一节
  2. java的WebService实践(cxf)
  3. rust比java慢,rust为什么跑得比js慢
  4. python数据库哪个好_终于明了python用什么数据库好
  5. 结对作业——四则运算
  6. java 类型转换_java中的基本数据类型的转换
  7. 【kafka】Kafka Producer Sticky Partitioner kafka 生产者 粘性 分区器
  8. Maven : jenkins 报错 solution will not be attepmted utils the update interval of nexus has elapse
  9. LVS--NAT模型
  10. 研究人员发现针对印度军队的网络间谍活动
  11. 【OpenCV学习笔记】【类型转换】一(IplImage和cv::Mat的类型相互转换)
  12. UNIX环境高级编程习题——第三章
  13. 《数学分析新讲》_张筑生,12.5节:隐函数定理(1)
  14. 天线SMA处抗静电保护收发开关
  15. 利用ESP8266与米思齐从零制作模拟温室大棚--硬件篇
  16. 中国大学慕课浙江大学【C语言课程】-翁恺教授第4周编程练习数字特征值(5分)
  17. 360路由器远程连接服务器,360路由器如何开启端口映射?
  18. 数码相框_在LCD上显示英文字母、汉字的点阵显示(2)
  19. Qt音视频开发27-Onvif设备搜索
  20. 开发常用到的工具有哪些

热门文章

  1. 屏显有啥硬科技可卷?让现在电视厂商这么拼
  2. 这个AI让马斯克头秃,还能帮他设计特斯拉
  3. 正则表达式抓取文件内容中的http链接地址
  4. 33 个 JavaScript 核心概念系列(三): 显式 (名义) 与 隐式 (鸭子)类型转换
  5. Elasticsearch-单机部署避坑指南
  6. shareinstall之Android SDK集成
  7. SQL on Linux Run on Docker
  8. 利用HTTP Cache来优化网站
  9. [AS3 3D Demo] Stage3D学习过程中开发的3个Demo
  10. 怎么定义list_常用的List接口下集合