洛谷 P4377 [USACO18OPEN]Talent Show + 分数规划
分数规划
分数规划可以用来处理有关分数即比值的有关问题。
而分数规划一般不单独设题,而是用来和dp,图论,网络流等算法结合在一起。
而基础的做法一般是通过二分。
二分题目我们都知道,需要求什么的最小或最大值,就二分什么。
而该最小或最大值都会满足单调性。
设当前最大值为\(maxn\),如果存在比值使得比\(maxn\)大,则有\(y/x>maxn\),化简得:\(y-x*maxn>0\)
就可以更新答案。所以满足二分性(即\(maxn\)越大则\(y-maxn*x\))越小则越难更新答案。
而二分check可以通过排序求得\(y[i]-x[i]*maxn\)的最大值,然后直接贪心取最大值,最后判断是否大于0即可
该题目
而对于该题来说,贪心的话显然不能通过排序求最大值,因为还有一个重量限制,所以可以用背包。
重量即为原数据的重量,价值即为\(y[i]-x[i]*maxn\),在转移时需要把所有重量大于W的最后都转移到W上
最后方便统计。
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, dp[100100];
struct dat {
int w, t;
int bizhi;
}data[1001000];
bool check(int mid)
{
memset(dp, 128, sizeof(dp));
dp[0] = 0;
for (int i = 1; i <= n; i++)
data[i].bizhi = data[i].t - mid * data[i].w;
int ha = dp[m];
for (int i = 1; i <= n; i++)
for (int j = m; j >= 0; j--)
if (dp[j] != ha)
dp[min(m, j + data[i].w)] = max(dp[min(m, j + data[i].w)], dp[j] + data[i].bizhi);//取min的意义是为了让所有质量都大于m的都转移到一个地方
if (dp[m] >= 0) return 1;//如果存在一个价值使得能够>=0即满足条件,则该mid可以,寻找更大的
else return 0;
}
signed main()
{
scanf("%lld%lld", &n, &m);
for (int i = 1; i <= n; i++)
scanf("%lld%lld", &data[i].w, &data[i].t), data[i].t *= 1000;
int l = 0, r = 150000, ans;
while (l <= r)
{
int mid = (l + r) / 2;
if (check(mid))
l = mid + 1, ans = mid;
else
r = mid - 1;
}
printf("%lld", ans);
return 0;
}
洛谷 P4377 [USACO18OPEN]Talent Show + 分数规划的更多相关文章
- 分数规划模板(洛谷P4377 [USACO18OPEN]Talent Show)(分数规划,二分答案,背包)
分数规划是这样一个东西: 给定若干元素,每个元素有两个属性值\(a_i,b_i\),在满足题目要求的某些限制下选择若干元素并求出\(\frac{\sum a}{\sum b}\)的最大值. 如果没有限 ...
- 洛谷4951 地震 bzoj1816扑克牌 洛谷3199最小圈 / 01分数规划
洛谷4951 地震 #include<iostream> #include<cstdio> #include<algorithm> #define go(i,a,b ...
- 洛谷P3778 [APIO2017]商旅——01分数规划
题目:https://www.luogu.org/problemnew/show/P3778 转化有点技巧: 其实直接关注比率的上下两项,也就是盈利和时间: 通过暴枚和 floyd 可以处理出两两点间 ...
- 洛谷2494 [SDOI2011]保密 (分数规划+最小割)
自闭一早上 分数规划竟然还能被卡精度 首先假设我们已经知道了到每个出入口的时间(代价) 那我们应该怎么算最小的和呢? 一个比较巧妙的想法是,由于题目规定的是二分图. 我们不妨通过最小割的形式. 表示这 ...
- p4377 [USACO18OPEN]Talent Show
传送门 分析 经典的01分数规划问题 用01背包check即可 代码 #include<iostream> #include<cstdio> #include<cstri ...
- LG4377 「USACO2018OPEN」Talent Show 分数规划+背包
问题描述 LG4377 题解 有 \(n\) 个物品,每个物品有两个权值 \(a,b\) 需要确定一组 \(w_i \in [0,1]\) ,使得 \(\frac{\sum{w_i \times a_ ...
- 洛谷 U2878 小R的分数比赛(fraction)
题目提供者 2015c07 标签 数论(数学相关) 高精度 难度 尚无评定 通过/提交 0/29 提交该题 记录 题目背景 P5难度系数:★★★☆☆ 小R再次挑战你. 这次的挑战又会是什么呢? 题目描 ...
- 洛谷P1298 最接近的分数
P1298 最接近的分数 题目描述 给出一个正小数,找出分子(非负)不超过M,分母不超过N(正数)的最简分数或整数,使其最接近给出的小数.“最接近”是指在数轴上该分数距离给出的小数最近,如果这个分数不 ...
- 洛谷 P4379 [USACO18OPEN]Lemonade Line
P4379 [USACO18OPEN]Lemonade Line 题目描述 这是农场上一个炎热的夏日,Farmer John要给他的 NN 头奶牛发柠檬汽水了!所有的 NN 头奶牛(方便起见,编号为 ...
随机推荐
- wbSocket
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- Python接口自动化基础---环境准备
安装requests模块 pip install requests request帮助文档查看 import requests print(help(requests)) Help on packag ...
- 将h5用HBuilderX打包成安卓app后,document.documentElement.scrollTop的值始终为0或者document.body.scrollTop始终为0
let time = setInterval(() => { let scroll = document.documentElement.scrollTop || document.body.s ...
- PHP 中使用ajax时一些常见错误总结整理
这篇文章主要介绍了PHP 中使用ajax时一些常见错误总结整理的相关资料,需要的朋友可以参考下 PHP作为后端时,前端js使用ajax技术进行相互信息传送时,经常会出错误,对于新手来说有些手足无措.总 ...
- [TensorFlow]Windows下安装并运行Hello World
参考网址:https://www.tensorflow.org/install/pip (或要VPN) 建议电脑是独显N卡机,安装前先升级驱动,减少不必要错误 1.下载Microsoft Visual ...
- Ane技术大全 - Devil程序员
来源:http://www.th7.cn/Program/Android/201405/206863.shtml 一.Ane概况 1.Ane是什么? Ane是为了解决 as3(flash)与Java代 ...
- 在编译内核的最后阶段出现sdhci_esdhc_imx_pdata未定义的错误
遇到下面这种错误 在网上查找资料后,发现一篇好文,提出了良好的找错误的策略: (1)利用grep命令查看该变量在何处使用: (2)查看相应的头文件是否在Kconfig中被定义且在make menuco ...
- Python——Python安装
下载地址:https://www.python.org/downloads/windows/ 3.X安装方法: 1. 设置一个自选路径,并将下面的选项打钩.(建议使用根目录) 2. 应用在所有用户中 ...
- 全局唯一ID生成器(Snowflake ID组成) 分析
Snowflake ID组成 Snowflake ID有64bits长,由以下三部分组成: time—42bits,精确到ms,那就意味着其可以表示长达(2^42-1)/(1000360024*365 ...
- mac 下enable mysql的load data in file
1)使用root用户登录mysql 2)将 local_infile 变量设置为true SET GLOBAL local_infile = true; 3)重启数据库 在系统偏好设置中找到MySql ...