1203 ( I NEED A OFFER! ) 


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%

问题是让求至少得到一份offer的最大概率,我们可以反着想,求出得不到offer的最小概率,然后用1减去即可。这个题很像01背包问题,令dp(i,j)表示选择第i个学校后,使用的金钱为j时,一份offer都得不到的最小概率。

则状态转移方程为dp(i,j)=min(dp(i-1,j),dp(i-1,j-vi)*pi) vi是第i个学校的申请费,pi是得不到offer的概率。由于数据范围比较大,所以不能开二维数组,需要优化为一维。

#include <iostream>
#include <iomanip>
using namespace std;double dp[10001];
int v[10000];
double p[10000];int main()
{int n, m;while (cin >> n >> m, n || m){for (int i = 0; i < m; i++){cin >> v[i] >> p[i];p[i] = 1.0 - p[i];}double mi = 1.0;for (int i = 0; i <= n; i++)dp[i] = 1.0;for (int i = 0; i < m; i++)for (int j = n; j >= v[i]; j--)dp[j] = min(dp[j], dp[j - v[i]] * p[i]), mi = min(mi, dp[j]);cout << setiosflags(ios::fixed) << setprecision(1) <<(1.0 - mi) * 100 << "%" << endl;}return 0;
}

【动态规划-01背包】 HDU 1203 I NEED A OFFER!相关推荐

  1. 动态规划——01背包

    动态规划--01背包 1. 经典"01背包" 2. "01背包"方法归纳 3. 实战 3.1 分割等和子集 3.2 最后一块石头的重量 II 3.3 目标和 3 ...

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

  3. 算法分析-动态规划-01背包

    在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2--Wn,与之相对应的价值为P1,P2--Pn.求出获得最大价值的方案. 注意:在本题中,所有的体积值均为整数.01的意思是,每个物 ...

  4. 动态规划—0-1背包

    动态规划有以下三个特点: 1:多阶段决策 2:最优值和最优解 3:最优子结构 动态规划采用自底而上的思想保存子问题值,避免重复计算.例如斐波那契数列的递归函数,f(5)=f(3)+f(4),而f(4) ...

  5. 动态规划01背包算法详解

    动态规划算法核心思想: 将大的问题转化为小问题进行解决. 01背包问题: 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的重量为W1,W2至Wn,与之相对应的价值为V1V2至Vn.01背 ...

  6. c++ 动态规划-01背包

    动态规划 - 01背包问题 1.使用递归遍历(穷举)求解: 01背包问题:给定 n 种物品和一个重量(容量)(限定条件)为 w 的背包,物品 i 的重量是 wi,其价值为 vi.(每种物品只有一个)问 ...

  7. 动态规划-----------01背包,完全背包与多重背包

    P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...

  8. HDU 1203 I NEED A OFFER!

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

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

最新文章

  1. Spring Cloud第十四篇: 服务注册(consul)
  2. js全局变量和局部变量
  3. git 拉新项目_git上拉取项目
  4. python中值滤波去除椒盐噪声_python 中值滤波,椒盐去噪,图片增强实例
  5. [春节话题]春节联欢晚会的感受
  6. bufferreader readline一次读一行_python中read(),readline(),readlines()的区别
  7. 关于ptype_all和pypte_base中的pt_prev的说明[转]
  8. 方法重载 java 1614780176
  9. STM32工作笔记0020---新建工程模板基于寄存器-M3
  10. 使用js给数组去重的3种常用方法
  11. CentOS查看硬件情况
  12. 第3次作业:阅读《构建之法》1-5章
  13. 大学生必学练习题 - C 语言经典50例
  14. 四层和八层电梯控制系统Proteus仿真设计,51单片机,附仿真和Keil C代码
  15. 网络安全之红蓝对抗实战
  16. 计算机学打字教案小学,6 用金山打字通练指法
  17. Android陀螺仪传感器学习
  18. JAVA400行代码实现飞翔的小鸟
  19. Tire树(字典树)
  20. B - Bitwise Exclusive-OR Sequence

热门文章

  1. python爬虫爬取指定用户微博图片及内容,并进行微博分类及使用习惯分析,生成可视化图表...
  2. 世界末日生存服务器中断,生存新作《最后的绿洲》服务器检修 Steam可全额退款...
  3. 跨越源界限.开创新纪元--暨微软互操作阶段成果汇报会
  4. 86 js获取元素样式值
  5. html结合JavaScript制作的霓虹灯
  6. 物联网智能农业的应用架构(三)【方案篇03】
  7. linux脚本添加source,shell中的source命令的巧妙用法
  8. 微信开源PhxSQL:高可用、强一致的MySQL集群
  9. 数据库SQL执行顺序
  10. 通过 Sqoop1.4.7 将 Mysql5.7、Hive2.3.4、Hbase1.4.9 之间的数据导入导出