P2370 yyy2015c01的U盘(二分+背包)
思路:先说一下题意吧。就是给你n个文件大小为v,价值为c, 但是硬盘的大小为S, 而且要存的总价值大于等于p。问每次传输k大小的文件。问k的最大值是多少?
我们以k为二分对象。
直接讲检验函数吧。 假设每次传输x大小的文件,则我们可以要筛选出小于等于的文件。这些文件就像01背包问题中要装的物品一样,有体积v和价值c。 然后背包的大小为S,问最多能装多少价值的东西。是不是问题一下就转化了。这样的最大值sum>=p时,说明价值成立!
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define ll long long
const int maxn = 1e3 + ;
ll dp[maxn];
int n, p, s, l=1e6+,r;
int v[maxn], c[maxn], ans, mid;
int vv[maxn], cc[maxn]; bool check(int x){
memset(dp, , sizeof(dp));
int cnt = ;
for (int i = ; i <= n;++i)
if (v[i] <= x){ vv[cnt] = v[i]; cc[cnt++] = c[i]; }
// for (int i = 1; i <= cnt; ++i)
// cout << "v=" << vv[i] << " c=" << cc[i] << endl;
for (int i = ; i < cnt;++i)
for (int j = s; j >= vv[i]; --j)
dp[j] = max(dp[j], dp[j - vv[i]] + cc[i]);
// cout << "x=" << x << " dp" << dp[s] << endl;
return dp[s] >= p;
} void half(){
while (l <= r){
mid = (l + r) >> ;
if (check(mid)){ r = mid - ; ans = mid; }
else l = mid + ;
}
} int main(){
cin >> n >> p >> s;
for (int i = ; i <= n; ++i)
{
cin >> v[i] >> c[i];
l = min(l, v[i]); r = max(r, v[i]);
}
half(); //二分
if (ans == )cout << "No Solution!" << endl;
else cout << ans << endl;
}
P2370 yyy2015c01的U盘(二分+背包)的更多相关文章
- P2370 yyy2015c01的U盘
P2370 yyy2015c01的U盘 题目背景 在2020年的某一天,我们的yyy2015c01买了个高端U盘. 题目描述 你找yyy2015c01借到了这个高端的U盘,拷贝一些重要资料,但是你发现 ...
- 洛谷 P2370 P2370 yyy2015c01的U盘
https://www.luogu.org/problemnew/show/P2370 二分+背包 #include <algorithm> #include <iostream&g ...
- [洛谷P2370]yyy2015c01的U盘
题目大意:有n个文件,每个文件有一个大小和价值,有一个容量为s的U盘,要装这些文件.传输文件需要接口,一个大小为k的接口能传输的最大文件的大小为k.问最少要多大的接口,才能使传输的文件价值$\ge p ...
- 洛谷 P2370 yyy2015c01的U盘
题目传送门 解题思路: 先将每个文件按照占空间从小到大排序,然后跑背包,当到了某一个文件时,价值够了,那么当前文件的体积就是答案. 其实本题是可以二分答案的,但是写挂了... AC代码: #inclu ...
- Inviting Friends(二分+背包)
Inviting Friends Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- CF-1055E:Segments on the Line (二分&背包&DP优化)(nice problem)
You are a given a list of integers a 1 ,a 2 ,…,a n a1,a2,…,an and s s of its segments [l j ;r j ] [ ...
- HDU 4606 Occupy Cities ★(线段相交+二分+Floyd+最小路径覆盖)
题意 有n个城市,m个边界线,p名士兵.现在士兵要按一定顺序攻占城市,但从一个城市到另一个城市的过程中不能穿过边界线.士兵有一个容量为K的背包装粮食,士兵到达一个城市可以选择攻占城市或者只是路过,如果 ...
- UVA 1149 Bin Packing 二分+贪心
A set of n 1-dimensional items have to be packed in identical bins. All bins have exactly the samele ...
- P1510 精卫填海
P1510 精卫填海二分答案二分背包容量,判断能否满足v.判断的话就跑01背包就好了. #include<iostream> #include<cstdio> #include ...
随机推荐
- window 服务器的Tomcat 控制台日志保存到日志文件.
在Linux系统中,Tomcat 启动后默认将很多信息都写入到 catalina.out 文件中,我们可以通过tail -f catalina.out 来跟踪Tomcat 和相关应用运行的情况. ...
- 通过示例学习JavaScript闭包
译者按: 在上一篇博客,我们通过实现一个计数器,了解了如何使用闭包(Closure),这篇博客将提供一些代码示例,帮助大家理解闭包. 原文: JavaScript Closures for Dummi ...
- 实现响应式——CSS变量
CSS 变量是 CSS 引入的一个新特性,目前绝大多数浏览器已经支持了,它可以帮助我们用更少的代码写出同样多的样式,大大提高了工作效率,本篇文章将教你如何使用 CSS 变量(css variable) ...
- angular raido checkbox select取值
radio {{modelName}} <div class="radio disIB"> <label class="i-checks"&g ...
- 05-HTML-超链接标签
<html> <head> <title>超链接标签学习</title> <meta charset="utf-8"/&g ...
- CSS之IE浏览器的hasLayout,IE低版本的bug根源
什么是hasLayout? hasLayout是IE特有的一个属性.很多的ie下的css bug都与其息息相关.在ie中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组 ...
- BZOJ4916: 神犇和蒟蒻(杜教筛)
题意 求 $$\sum_{i = 1}^n \mu(i^2)$$ $$\sum_{i = 1}^n \phi(i^2)$$ $n \leqslant 10^9$ Sol zz的我看第一问看了10min ...
- bootstrap日期控件(双日期、清空等问题解决)
bootstrap以它优美的外观和丰富的组件,使它成为目前最流行的前端框架.在项目开发中,我们使用它的日期控件确实遇到了一些问题: 1.日期控件后面两个图标点击触发失效 2.双日期关联问题 3.双日期 ...
- LockSupport的源码实现原理以及应用
一.为什么使用LockSupport类 如果只是LockSupport在使用起来比Object的wait/notify简单, 那还真没必要专门讲解下LockSupport.最主要的是灵活性. 上边的例 ...
- JNI NDK (AndroidStudio+CMake )实现C C++调用Java代码流程
JNI/NDK Java调用C/C++前言 通过第三篇文章讲解在实际的开发过程中Java层调用C/C++层的处理流程.其实我们在很大的业务里也需要C/C+ +层去调用Java层,这两层之间的相互调用 ...