【HDU1203 HDU2955 01背包中的简单概率问题处理】
HDU1203
Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了。
要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的。Speakless没有多少钱,总共只攒了n万美元。
他将在m个学校中选择若干的(当然要在他的经济承受范围内)。每个学校都有不同的申请费用a(万美元),并且Speakless估计了他得到这个学校offer的可能性b。
不同学校之间是否得到offer不会互相影响。帮助他计算一下,他可以收到至少一份offer的最大概率。
(如果Speakless选择了多个学校,得到任意一个学校的offer都可以)。
求至少获得一个的offer的最大概率,那么反面就是一个都没有获得的最小概率
#include <bits/stdc++.h>
#include <iostream>
#define X 10005
#define inf 0x3f3f3f3f
#define PI 3.141592653589793238462643383
#define IO ios::sync_with_stdio(false),cin.tie(0), cout.tie(0);
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=1e6+10;
double w[maxn];
double ww[maxn];
int c[maxn];
double dp[maxn];
double dp1[maxn];
int main()
{int n,m;while(cin>>m>>n,n!=0||m!=0){for(int i=0;i<n;++i){cin>>c[i]>>w[i];w[i]=1-w[i];}for(int i=0;i<=m;++i)dp[i]=1.0;//memset(dp,1,sizeof(dp));dp[0]=1;dp1[0]=1;for(int i=0;i<n;++i){for(int j=m;j>=c[i];--j)dp[j]=min(dp[j],dp[j-c[i]]*w[i]);}printf("%.1lf%%\n",(1-dp[m])*100.0);}
}
HDU2955
印象好题。。。。
给定一个被抓的概率p,还有一些银行,给定这些银行的钱数以及抢劫这些银行被抓的概率。
求在被抓的概率不大于p的情况下最多可以抢到多少钱。
自带bug把概率当作背包,钱数当作容量,这样没法确定精度是多少位,也没法计算概率
总结正确姿势:把被抓概率转化为可逃跑概率,总的金钱当作背包(也没有给出背包的总容量,把总的转化为背包容量),可逃跑的概率为价值
还有就是概率是满足乘法原理的
初始化问题:难道紧是使逃跑的概率尽量大,这一要求,才初始化为-1嘛????
#include <bits/stdc++.h>
#include <iostream>
#define X 10005
#define inf 0x3f3f3f3f
#define PI 3.141592653589793238462643383
#define IO ios::sync_with_stdio(false),cin.tie(0), cout.tie(0);
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
typedef long long ll;
const ll moad=1e9+7;
const int maxn=1e6+10;
double dp[maxn];
int w[maxn];
int vis[maxn];
double c[maxn];
int main()
{int t;double p,n,_;cin>>t;while(t--){int sum=0;cin>>p>>n;double __=1.0-p;for(int i=0;i<n;++i){cin>>w[i]>>_;c[i]=1.0-_;sum+=w[i];}//sum能抢到的最大量for(int i=1;i<maxn;++i)dp[i]=-1;dp[0]=1.0;for(int i=0;i<n;++i){for(int j=sum;j>=w[i];--j)dp[j]=max(dp[j],dp[j-w[i]]*c[i]);}for(int i=sum;i>=0;--i)if(dp[i]>=__){cout<<i<<endl;break;}}return 0;
}
【HDU1203 HDU2955 01背包中的简单概率问题处理】相关推荐
- 416. 分割等和子集 - 01背包中判断是否装满的问题
✅01背包中是"否能装满"的问题 如果能把数组分割成两个子集且使得子集的元素和相等,那么证明该集合的元素总和必须要是能被2整除的,这是一个前提条件 假设总和为sum,那问题就转化成 ...
- 494. 目标和 - 01背包中装满背包有几种方法的问题
✅01背包中"装满背包有几种方法"的问题 这道题难就难在如何把题面转化为背包问题
- 01背包中背包装满和不装满
背包: 有n 种不同的物品,每个物品有两个属性,v体积,c价值,现在给一个体积为 m 的背包,问最多可带走多少价值的物品. 状态转移方程 dp[i][j]=max(dp[i-1][j], ...
- 01背包中是否背包装满问题
背包: 有n 种不同的物品,每个物品有两个属性,v体积,c价值,现在给一个体积为 m 的背包,问最多可带走多少价值的物品. 状态转移方程 dp[i][j]=max(dp[i-1][j], ...
- HDU2955 01背包
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std;//#in ...
- 【UVA624 01背包中的路径问题】
UVA624 给你一个序列,让你从其中选出一些数,然后得到最接近题目所给的一个数,并需要输出所选的数 考察o1背包容量是从大到小容量减少的方式来进行装入的, 路径记录,感觉好题啊 初始化为求正好放满的 ...
- 背包问题教程-01背包,完全背包,多重背包,混合背包 收藏
P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...
- 01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目
(二)01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目 //有N件物品和一个容量为V的背包.第i件物品的体积是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. ...
- HDU 1864 最大报销额 (dp 01背包)
最大报销额 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
最新文章
- LabVIEW设置应用程序显示标签透明
- Python新工具:用三行代码提取PDF表格数据
- 装箱与拆箱及其性能损失问题
- arcgis python编程案例-ArcGIS Python编程案例-电子资料链接
- 跨域 (3) window.name
- 别让扁平化设计平淡无奇
- 笔记-项目立项管理-项目的可行性研究-可行性研究内容
- 漫步者lollipods如何调节音量_漫步者MF5扩音器体验:老师值得入手
- 【个人阅读】软件工程M1/M2阶段总结
- html手机背景音乐,HTML插入背景音乐方法【全】
- SQL2005数据库可疑的解决方法
- OpenCV——LBP特征
- 战旗助手服务器代码,炉石盒子PC端人工智能战棋助手启用!
- b站视频下载与字幕下载方式总结
- C盘pc的Android文件夹,清理系统盘C盘的无用文件
- JavaScript 中的 Symbols 怎么用
- Kotlin 苦海无涯(一)
- problem-1654B. Prefix Removals-codeforces
- VRchat改模型相关
- 35 米色系网页设计