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的最小概率。
处理数据时不能够把概率机械地相加,同时状态转移后要求的是拿不到的最小概率,而非求拿到offer的最大概率。
如果把状态转移方程写成dp[j]=max(dp[j],dp[j -a[i]]*b[i]),那么就变成:求拿到所有offer的最大概率。(拿到所有offer和拿到至少一份offer是不同的)
故:最大背包因为状态转移变成了最小背包
因此,状态转移方程:dp[j]=min(dp[j],dp[j-a[i]]*(1.0–b[i]))

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
inline int read() {int x=,f=;char c=getchar();while(c!='-'&&(c<''||c>''))c=getchar();if(c=='-')f=-,c=getchar();while(c>=''&&c<='')x=x*+c-'',c=getchar();return f*x;}
typedef long long ll;
const int maxn=;
const int INF=0x3f3f3f3f;
int mo[maxn];
double of[maxn];
double dp[maxn];
int main()
{
int m,n;
while(~scanf("%d%d",&n,&m)){
if(m==&&n==){
break;
}
for(int i=;i<=m;i++){
scanf("%d%lf",&mo[i],&of[i]);
}
for(int i=;i<=n;i++){
dp[i]=;
}
for(int i=;i<=m;i++){
for(int j=n;j>=mo[i];j--){
dp[j]=min(dp[j],dp[j-mo[i]]*(-of[i]));
}
}
printf("%.1lf%%\n",(-dp[n])*);
}
return ;
}

最新文章

  1. C struct结构体内存对齐问题
  2. Android成长日记-五大布局
  3. Java_Eclipse_Maven插件部署
  4. Oracle 正则表达式函数-REGEXP_REPLACE 使用例子
  5. 控制执行流程 Thinking in Java 第四章
  6. iOS开发(1) WebView和HTML 显示
  7. mybatis知识点
  8. What&#39;s the use of @ before the path defination
  9. 通过dbcp链接池对数据库操作报 Cannot create PoolableConnectionFactory (Could not create connection to database server. Attempted reconnect 3 times. Giving up.)--解决方案
  10. Objective-C 协议(接口)
  11. linux备份mysql数据库
  12. cocos2d-x新手学习之Helloworld(第三篇)[版本号:cocos2d-x-3.1.1]
  13. Cookie常用操作以及属性
  14. 从头编写 asp.net core 2.0 web api 基础框架 (2)
  15. 在python后台如何将客户端提交的form表单数据提取出来?
  16. Chapter 1 Securing Your Server and Network(13):配置端点安全性
  17. c#解决浏览器跨域问题
  18. 关于delete和delete[]的区别
  19. ppt复制文本框文字到word的方法
  20. Linux内核设计与实现 第一章 第二章

热门文章

  1. [BJWC2010] 外星联络 - 后缀数组
  2. [HNOI2017] 礼物 - 多项式乘法FFT
  3. 百度地图和echarts结合实例
  4. Python记
  5. 【NOIP2012普及组】寻宝
  6. mysql查询速度慢的分析和解决
  7. python之路之考试题目
  8. Java 字符串、数值与16进制相互转化
  9. 解决async 运行多线程时报错RuntimeError: There is no current event loop in thread &#39;Thread-2&#39;
  10. 解决用 VB 中用 ADO 访问 数据库时 SQL 查询处理 Null 值的问题( 使用 iff(isNull(字段), 为空时的值,不为空时的值) 来处理)