Description

Luogu2107

Solution

一开始打了一个60分的暴力DP,结果一分都没得……本地调了好久才发现是没开long long

由于我的DP方程没有任何性质,就是一个01背包,所以就没啥可优化的了。

这个题的正解其实不是DP,而是贪心……由于是单向的走,在每个位置选用时少的机房AK总是好的,这也就等价于不在用时多的机房AK,所以开个堆存一下AK了那些机房,超时了就把时间最长的机房去掉就行了。

Code

DP:

#include <algorithm>
#include <cstdio>
#include <cstring> typedef long long LL;
const int N = 1e5 + 10; LL f[N];
LL n, m;
struct node {
LL t, x;
bool operator<(const node& a) const { return x < a.x; }
} a[N]; int main() {
scanf("%lld%lld", &n, &m);
for (int i = 1; i <= n; ++i) scanf("%lld%lld", &a[i].x, &a[i].t);
std::sort(a+1, a+n+1);
memset(f, 0x3f, sizeof f);
f[0] = 0;
LL ans = 0;
for (int i = 1; i <= n; ++i) {
for (int j = i; j; --j) {
f[j] = std::min(f[j] + a[i].x - a[i-1].x, f[j-1] + a[i].x - a[i-1].x + a[i].t);
if (f[j] <= m) ans = std::max(ans, 1ll*j);
}
f[0] += a[i].x - a[i-1].x;
}
printf("%lld\n", ans);
return 0;
}

贪心:

#include <cstdio>
#include <algorithm>
#include <queue> typedef long long LL;
const int N = 100000 + 10; int n;
LL m;
struct node {
LL x, t;
bool operator<(const node& b) const { return t < b.t; }
} a[N];
std::priority_queue<node> q; bool cmp(const node& a, const node& b) { return a.x < b.x; } int main() {
scanf("%d%lld", &n, &m);
for (int i = 1; i <= n; ++i) {
scanf("%lld%lld", &a[i].x, &a[i].t);
if (a[i].x > m || a[i].t > m) { --i; --n; }
}
std::sort(a+1, a+n+1, cmp);
int tmp = 0, ans = 0; LL t = 0;
for (int i = 1; i <= n; ++i) {
t += a[i].t;
tmp++;
q.push(a[i]);
while (!q.empty() && t + a[i].x > m) {
tmp--;
t -= q.top().t;
q.pop();
}
if (t + a[i].x <= m) ans = std::max(ans, tmp);
}
printf("%d\n", ans);
}

Note

  • long longlong longlong long,这个题不开long long一分都没有,想象一下NOIp如果如此的话,我大概就gg了。
  • 花费或价值相同的背包问题可以贪心啊!!!

[Luogu]小Z的AK计划的更多相关文章

  1. luogu P2107 小Z的AK计划

    最近复习了一下堆,于是去luogu上找一些简单题写一写 贪心的想,小z不会到一半以后回头去Ak,因为这样从时间上想肯定是不优的,他可以早在之间经过时就AK所以我们可以将所有机房按照横坐标排序可以想到的 ...

  2. 【P2107】小Z的AK计划(优先队列+贪心)

    水一发优先队列的水题.. 这个题貌似以前有做过类似的.具体的方法是用大根堆辅助贪心算法得出正解.可以看出来,如果小Z走到了某个地方,那么他最远一定是到了这里,不可能有再走回来这种操作,因为很明显那样不 ...

  3. Luogu P2107 小Z的AK计划 堆贪心

    好久不做这种题了... 存一下每个点的位置和时间,由于达到某个位置跟之前去哪里AK的无关,所以在时间超限后,可以用大根堆弹掉之前消耗时间最大的,来更新答案,相当于去掉之前花费最大的,直到时间不在超限. ...

  4. 洛谷P2107 【小Z的AK计划】

    #include<iostream> #include<queue> #include<algorithm> using namespace std; struct ...

  5. [洛谷P2107] 小Z的AK计划

    题目类型:贪心,堆 传送门:>Here< 题意:给出\(N\)个房间,每个房间距离起点的距离为\(x[i]\),每个房间可以选择进去和不进去,如果进去了那么要\(t[i]\)秒后才能出来. ...

  6. 【题解】小X的AK计划

    题目描述 虽然在小X的家乡,有机房一条街,街上有很多机房.每个机房里都有一万个人在切题.小X刚刷完CodeChef,准备出来逛逛.机房一条街有n个机房,第i个机房的坐标为xi,小X的家坐标为0.小X在 ...

  7. [題解](貪心/堆)luogu_P2107小Z的AK計劃

    清明講過一道類似的,難度略大的:P3545 [POI2012]HUR-Warehouse Store 兩道題類似,都是暫時先把前面的加進候選集合里,如果超出限制的話就拿現在這個和前面的交換, 相當於不 ...

  8. Luogu 1494 - 小Z的袜子 - [莫队算法模板题][分块]

    题目链接:https://www.luogu.org/problemnew/show/P1494 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天 ...

  9. P1494 [国家集训队]小Z的袜子(luogu)

    P1494 小Z的袜子 终于了解了莫队算法(更专业的名称Square Root Decomposition of Queries) 莫队算法: 一般来说解决静态(实际上也有修改的但复杂度更高)的离线( ...

随机推荐

  1. 2.Docker Compose 部署应用程序

    部署 Tomcat version: '3.1' services:  tomcat:   restart: always   image: tomcat   container_name: tomc ...

  2. 另外一种获取redis cluster主从关系和slot分布的方法

    条条大路通罗马,通过最近学习redis cluster 观察其输出,发现了另外一种获取master-slave关系的方法. [redis@lxd-vm1 ~]$ cat get_master_slav ...

  3. The sklearn preprocessing

    Recently, I was writing module of feature engineering, i found two excellently packages -- tsfresh a ...

  4. 单调栈(POJ2559)

    Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base l ...

  5. 0004 工程配置settings.py

    两个目录的区别: 工程目录是指包含manage.py文件的目录 配置目录是批包含settings.py文件的目录 在配置目录中找到并打工settings.py文件,做以下配置: 01 DEBUG DE ...

  6. Java_Day4(上)

    Java learning_Day3(上) 本人学习视频用的是马士兵的,也在这里献上 <链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA> ...

  7. 使用VSCode创建简单的Razor Webapp--1.入门

    1.下载vscode,安装dotnet core sdk 在cmd中使用命令dotnet --version可以查看当前安装的版本 2.打开vscode,设置语言和扩展 在最左边的工具栏,点击最下面的 ...

  8. [国家集训队] Crash的数字表格 - 莫比乌斯反演,整除分块

    考虑到\(lcm(i,j)=\frac{ij}{gcd(i,j)}\) \(\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{gcd(i,j)}\) \(\sum_{d=1}^{n} ...

  9. 关于Git的右键菜单消失的处理

    右键菜单 Git Bash Here window + R,输入regedit回车进入注册表 进入如下目录 HKEY_CLASSES_ROOT\Directory\Background\shell 在 ...

  10. JDBC——Connection数据库连接对象

    功能 1.获取执行SQL的对象 方法:createStatement() 用于创建向数据库发送SQL语句的一个对象.修饰/返回值类型:Statement(声明) 方法:prepareStatement ...