I NEED A OFFER!

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 15503    Accepted Submission(s): 6128
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 '%'.

 
思路:01背包问题。要求得到至少一份offer的最大概率,能够转化为求都得不到offer的最小概率。
#include <stdio.h>
#include <iostream>
#include<algorithm>
using namespace std;
#define N 100005
double dp[N];
struct node
{int x;double y;
}a[N];double min(double a,double b)
{return a<b?

a:b; } int main() { int n,m; int k,i,j; while(cin>>n>>m) { if(n==0&&m==0) break; for(i=0;i<m;i++) { cin>>a[i].x>>a[i].y; a[i].y=1-a[i].y; // 得不到offer的概率 } for(i=0;i<=n;i++) dp[i]=1; for(i=0;i<m;i++) { for(j=n;j>=a[i].x;j--) { dp[j]=min(dp[j-a[i].x]*a[i].y,dp[j]); // 要么选这座大学 得不到offer (dp[j-a[i].x]*a[i].y)。要么选这座大学得到offer (dp[j]) } } printf("%.1lf%%\n",(1-dp[n])*100); } return 0; }

 

转载于:https://www.cnblogs.com/yxwkf/p/5045867.html

hdu 1203 I NEED A OFFER!相关推荐

  1. 【动态规划-01背包】 HDU 1203 I NEED A OFFER!

    1203 ( I NEED A OFFER! )  Problem Description Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学 ...

  2. HDU 1203 I NEED A OFFER!

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

  3. hdu 1203 I NEED A OFFER!

    I NEED A OFFER!                                                                   Time Limit: 2000/1 ...

  4. 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) ...

  5. 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) ...

  6. 杭电OJ分类题目(3)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(3) HDU Computational Ge ...

  7. 背包问题常见解题策略与例题解析

    背包问题作为常见的一种Dp 题目的变法多种多样 然而只要你理解透了背包的做法和各种优化 模型就显而易见了 千万不要似懂非懂 如果还有疑虑可以参考我的另一篇文章 背包九讲--全篇详细理解与代码实现 常见 ...

  8. 动态规划题目——背包

    背包问题 1. 01背包 [HDOJ 2955.Robberies] [HDOJ 1203.I NEED A OFFER!] [HDOJ 1864.最大报销额] 2. 完全背包 [HDOJ 2159. ...

  9. linux查找文件模糊名字,linux中模糊查找文件

    1.在当前目录下搜索指定文件: find . -name test.txt 2.在当前目录下模糊搜索文件: find . -name '*.txt' 3.在当前目录下搜索特定属性的文件: find . ...

最新文章

  1. Hadoop集群的基本操作(一:HDFS操作及MapReduce程序练习)
  2. 如何从路由器中查找ADSL帐号 [2007年4月13日]
  3. 中国和英国的在学生创业环境上的区别
  4. java打印sql表_java程序获得SqlServer数据表的表结构
  5. linux+qt导入构建,如何在Qt Creator项目向导中添加自定义构建步骤?
  6. Java消息中间件的概述与JMS规范
  7. spring 自动扫包代码放置的位置问题
  8. 获取CPUID序列号的两种办法
  9. 转接口IC ADV7280/ADV7280-M:CVBS转MIPI芯片 10位、4倍过采样标清电视视频解码器,支持去隔行
  10. DateUtil时间工具类的基本使用
  11. emWin6.12模拟器发布,更新内容较多,增加环形控件,WIFI二维码(2020-04-09)
  12. 《深入理解java虚拟机》学习笔记之虚拟机即时编译详解
  13. 一起学 WebGL:图元的类型
  14. 优秀互联网面试题总结
  15. 显著性检验【t-test、方差分析、ks检验】
  16. python提取前几行数据_python读取文件的前几行
  17. 金山词霸2011 vs. 有道词典4.0
  18. Windows 7下VS2008升级补丁
  19. JAVA Apache POI解析docx格式的word文件并提取带样式文本
  20. 使用idea手搓java计算器

热门文章

  1. java对象--多态的好处
  2. 找个轻量级的Log库还挺难
  3. 黑加仑妞 使用vue+flask做全栈开发的全过程(实现前后端分离)
  4. 如何查看系统启动时间-
  5. GDB 调试命令讲解-转
  6. 如何打印网页版的发票_纸质发票将消失,电子发票如何报销、打印、收集?这一篇就够了...
  7. 在VMware上安装CentOS-6.5 minimal - 安装VMware Tools
  8. 设置eclipse中xml的默认编辑器、行数、xsd和dtd
  9. 推荐12个非常不错而且免费的后台管理HTML模板
  10. Javascript获取select下拉框选中的的值