传送门:小咪买东西

传送门:wyh的物品

这两道题的题目大致相似,解法也大抵相似(双倍经验!!),接下来主要讲解wyh的物品

题目描述:

wyh学长现在手里有 n 个物品,这 n 个物品的重量和价值都告诉你,然后现在让你从中选取 k 个,问你在
所有可能选取的方案中,最大的单位价值为多少(单位价值为选取的 k 个物品的总价值和总重量的比值

首先看到这道题后,我当时是并不知道01规划这个思想的,所以我的第一想法肯定和大部分人一样直接想到了贪心思想(就是比值排一个序然后取前K个),即使当我们得知01规划是正解后我当时还未能看出贪心的错误,后来我想到了一个反例

假设我们有以下这三个分数
100/2     1000000/99999      1/2
如果贪心来说我们选取得肯定是前两个,但是显然因为假分数的问题(如果确保是真分数,我们的贪心就是正确的)
我们此时的分数2并没有分数3来的更加优秀,所以我们的贪心思想就变得假了

既然我们发现我们的贪心思想假了之后,接下来就是我们的正解了01规划

我们观察我们的问题,发现最终的答案显然是
∑ i = 1 k v i \sum_{i = 1}^k{v_i} ∑i=1k​vi​ \ \backslash \ ∑ i = 1 k c i \sum_{i = 1}^k{c_i} ∑i=1k​ci​这个的最大值(选取K个)

我们假设这个式子的值为L

我们得到

∑ i = 1 k v i \sum_{i = 1}^k{v_i} ∑i=1k​vi​ \ \backslash \ ∑ i = 1 k c i \sum_{i = 1}^k{c_i} ∑i=1k​ci​ ≥ \geq ≥L

得到 ∑ i = 1 k v i \sum_{i = 1}^k{v_i} ∑i=1k​vi​ — ∑ i = 1 k c i \sum_{i = 1}^k{c_i} ∑i=1k​ci​ × \times ×L ≥ \geq ≥ 0

并且当我们得到这样的一个式子之后,和之前的比值就完全不同了,因为是加减法所以此时我们的这个式子是可以拆的,也就是k个```Vi-Ci*L``个式子相加,此时我们在根据这个来排序即可

对于怎么找到我们的L,我们可以选择采用二分来找到,对于每一次我们的L,假设我们的求和式子最终的答案是大于0的话,说明我们的L是可以继续增加因为显然这个式子是关于L单调减的

这就是最朴素的01规划思想了

加下来是我们的代码部分

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <string.h>
#include <stack>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
#define root 1,n,1
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
inline ll read() {ll x=0,w=1;char ch=getchar();for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';return x*w;
}
#define maxn 1000000
#define ll_maxn 0x3f3f3f3f3f3f3f3f
const double eps=1e-8;
int T;
struct Thing{double c,v,bizhi;
}thing[maxn];
int n,k;
bool cmp(Thing a,Thing b) {return a.bizhi>b.bizhi;
}
int check(double mid) {for(int i=1;i<=n;i++){thing[i].bizhi=thing[i].v-thing[i].c*mid;}sort(thing+1,thing+n+1,cmp);double ans=0;for(int i=1;i<=k;i++) {ans+=thing[i].bizhi;}if(ans>=0) return true;else return false;
}
int main() {T=read();while(T--) {memset(thing,0,sizeof(thing));n=read();k=read();for(int i=1;i<=n;i++) {thing[i].c=read();thing[i].v=read();}double l=0,r=1e7;double ans=0;while(r-l>=eps) {double mid=(l+r)/2;if(check(mid)) {ans=mid;l=mid;}else {r=mid;}}printf("%.2lf\n",ans);}return 0;
}

刷题记录:牛客NC14662小咪买东西NC15446wyh的物品相关推荐

  1. 刷题记录:牛客NC15162小H的询问

    传送门:牛客 题目描述: 小H给你一个数组{a},要求支持以下两种操作: 1. 0 l r(1<=l<=r<=n),询问区间[l,r]中权值和最大的有效子区间的权值和,一个子区间被认 ...

  2. NC14662 小咪买东西

    题目: NC14662 小咪买东西 ,哈哈,我们今天来看一道01分数规划的题嘛,这是选自牛客上的一道题,好了,我们一起来看看题意吧: 考虑到直接复制题目,或者截屏的方式不是很方便阅读,我就把直接题目链 ...

  3. 刷题记录:牛客NC24608[USACO 2011 Ope S]Learning Languages

    传送门:牛客 题目描述: [USACO11OPEN]Learning Languages S 农夫约翰的 N ( 2 < = N < = 10 , 000 ) N(2<=N<= ...

  4. 刷题记录:牛客NC24083Greedy Gift Takers

    传送门:牛客 题目描述 Farmer John's nemesis, Farmer Nhoj, has NNN cows (1≤N≤1051 \leq N \leq 10^51≤N≤105), con ...

  5. 刷题记录:牛客NC16129小小粉刷匠

    传送门:牛客 题目描述: "lalala,我是一个快乐的粉刷匠",小名一边快活地唱着歌,一边开心地刷着墙",兴致突然被打断,"小名,你今天如果刷不 完这一栋楼的 ...

  6. 刷题记录:牛客NC17889新建 Microsoft Office Word 文档

    传送门:牛客 题目描述: CSL正在学习<计算机办公自动化>文件的建立与删除. CSL发现,当他新建一个word文档时,会得到一个名为"新建 Microsoft Office W ...

  7. 刷题记录:牛客NC17193简单瞎搞题

    传送门;牛客 题目描述: 一共有 n个数,第 i 个数是 xi xi 可以取 [ l i , r i ] [li , ri] [li,ri] 中任意的一个值. 设 S = ∑ x i 2 S = \s ...

  8. 刷题记录:牛客NC19910[CQOI2007]矩形RECT

    传送门;牛客 题目描述: 给一个a*b矩形,由a*b个单位正方形组成.你需要沿着网格线把它分成分空的两部分,每部分所有格子连通,且至少 有一个格子在原矩形的边界上."连通"是指任两 ...

  9. 刷题记录:牛客NC16122郊区春游

    传送门:牛客 题目描述: 今天春天铁子的班上组织了一场春游,在铁子的城市里有n个郊区和m条无向道路,第i条道路连接郊区Ai和Bi, 路费是Ci.经过铁子和顺溜的提议,他们决定去其中的R个郊区玩耍(不考 ...

最新文章

  1. 你确定你理解内存分配吗?
  2. spring bean加载过程_Spring源码剖析3:Spring IOC容器的加载过程
  3. mac编译php apache,在Mac OS上自行编译安装Apache服务器和PHP解释器
  4. win7操作系统上,批处理文件,直接双击的时候,能运行起来。但是以管理员身份运行的时候,都闪退。请问,这是怎么回事?...
  5. 做个中国清官网,有人感兴趣吗
  6. angular2.0中为什么初始化的时候就把全部路由下的模板文件加载出来的原因。
  7. 从GCN中学习的信息熵
  8. Java虚拟机对内部锁的四种优化方式
  9. 【Hinton论文翻译与理解】How to represent part-whole hierarchies in a neural network_202102
  10. 【PID优化】基于蝙蝠 粒子群 花卉授粉算法和布谷鸟搜索算法实现热交换器的PI控制器优化
  11. C语言基础练习-输入球体半径,计算球体表面积和体积
  12. cornell grasp data 康奈尔大学抓取数据集 百度云
  13. 关于服务器端和客户端的区别
  14. hooper篮球意思_这些篮球术语都什么意思?
  15. 【阿朱洞察】中国云计算市场未来3年展望(完善版)
  16. 36晋级12第十场:九进四
  17. ROS订阅tf并转换坐标
  18. 常用的几款Vue移动端UI推荐
  19. Pyhotn3,爬取B站up主的信息!
  20. 运算符、数据类型、序列类型

热门文章

  1. 深圳市友昊天创2022年度新方案
  2. 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用34
  3. python高斯求和
  4. 特鲁姆普完胜奥沙利文 首夺斯诺克大师赛冠军
  5. Android 布局color颜色值大全
  6. MSP430 DCO数据丢失问题
  7. 卡特兰数 相关问题 hdu 5184 Brackets
  8. 网络骨架:Backbone(神经网络基本组成——BN层、全连接层)
  9. AD采集之离散化概念(Quantizer模型使用介绍)
  10. 【南航计算机系统结构】第1,2,3章作业