思路:先说一下题意吧。就是给你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盘(二分+背包)的更多相关文章

  1. P2370 yyy2015c01的U盘

    P2370 yyy2015c01的U盘 题目背景 在2020年的某一天,我们的yyy2015c01买了个高端U盘. 题目描述 你找yyy2015c01借到了这个高端的U盘,拷贝一些重要资料,但是你发现 ...

  2. 洛谷 P2370 P2370 yyy2015c01的U盘

    https://www.luogu.org/problemnew/show/P2370 二分+背包 #include <algorithm> #include <iostream&g ...

  3. [洛谷P2370]yyy2015c01的U盘

    题目大意:有n个文件,每个文件有一个大小和价值,有一个容量为s的U盘,要装这些文件.传输文件需要接口,一个大小为k的接口能传输的最大文件的大小为k.问最少要多大的接口,才能使传输的文件价值$\ge p ...

  4. 洛谷 P2370 yyy2015c01的U盘

    题目传送门 解题思路: 先将每个文件按照占空间从小到大排序,然后跑背包,当到了某一个文件时,价值够了,那么当前文件的体积就是答案. 其实本题是可以二分答案的,但是写挂了... AC代码: #inclu ...

  5. Inviting Friends(二分+背包)

    Inviting Friends Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...

  6. 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 ] [ ...

  7. HDU 4606 Occupy Cities ★(线段相交+二分+Floyd+最小路径覆盖)

    题意 有n个城市,m个边界线,p名士兵.现在士兵要按一定顺序攻占城市,但从一个城市到另一个城市的过程中不能穿过边界线.士兵有一个容量为K的背包装粮食,士兵到达一个城市可以选择攻占城市或者只是路过,如果 ...

  8. UVA 1149 Bin Packing 二分+贪心

    A set of n 1-dimensional items have to be packed in identical bins. All bins have exactly the samele ...

  9. P1510 精卫填海

    P1510 精卫填海二分答案二分背包容量,判断能否满足v.判断的话就跑01背包就好了. #include<iostream> #include<cstdio> #include ...

随机推荐

  1. window 服务器的Tomcat 控制台日志保存到日志文件.

    在Linux系统中,Tomcat 启动后默认将很多信息都写入到 catalina.out 文件中,我们可以通过tail  -f  catalina.out 来跟踪Tomcat 和相关应用运行的情况. ...

  2. 通过示例学习JavaScript闭包

    译者按: 在上一篇博客,我们通过实现一个计数器,了解了如何使用闭包(Closure),这篇博客将提供一些代码示例,帮助大家理解闭包. 原文: JavaScript Closures for Dummi ...

  3. 实现响应式——CSS变量

    CSS 变量是 CSS 引入的一个新特性,目前绝大多数浏览器已经支持了,它可以帮助我们用更少的代码写出同样多的样式,大大提高了工作效率,本篇文章将教你如何使用 CSS 变量(css variable) ...

  4. angular raido checkbox select取值

    radio {{modelName}} <div class="radio disIB"> <label class="i-checks"&g ...

  5. 05-HTML-超链接标签

    <html> <head>  <title>超链接标签学习</title>  <meta charset="utf-8"/&g ...

  6. CSS之IE浏览器的hasLayout,IE低版本的bug根源

    什么是hasLayout? hasLayout是IE特有的一个属性.很多的ie下的css bug都与其息息相关.在ie中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组 ...

  7. BZOJ4916: 神犇和蒟蒻(杜教筛)

    题意 求 $$\sum_{i = 1}^n \mu(i^2)$$ $$\sum_{i = 1}^n \phi(i^2)$$ $n \leqslant 10^9$ Sol zz的我看第一问看了10min ...

  8. bootstrap日期控件(双日期、清空等问题解决)

    bootstrap以它优美的外观和丰富的组件,使它成为目前最流行的前端框架.在项目开发中,我们使用它的日期控件确实遇到了一些问题: 1.日期控件后面两个图标点击触发失效 2.双日期关联问题 3.双日期 ...

  9. LockSupport的源码实现原理以及应用

    一.为什么使用LockSupport类 如果只是LockSupport在使用起来比Object的wait/notify简单, 那还真没必要专门讲解下LockSupport.最主要的是灵活性. 上边的例 ...

  10. JNI NDK (AndroidStudio+CMake )实现C C++调用Java代码流程

    JNI/NDK Java调用C/C++前言  通过第三篇文章讲解在实际的开发过程中Java层调用C/C++层的处理流程.其实我们在很大的业务里也需要C/C+ +层去调用Java层,这两层之间的相互调用 ...