题目大意

有 \(n\) 件物品,每件物品有三个属性 \(a_i, b_i, c_i (a_i < b_i)\)。

再给出 \(q\) 个询问,每个询问由非负整数 \(m, k, s\)组成,问是否能够选出某些物品使得:

  1. 对于每个选的物品 \(i\),满足 \(a_i \leq m\) 且 \(b_i > m + s\)。

  2. 所有选出物品的 \(c\) 的和正好是 \(k\)。

分析

如果没有 \(a_i \leq m\) 且 \(b_i > m + s\) 的条件,明显是个背包。

然而有这两个限制就不好办了。我们可以先把询问离线下来,按照 \(m\) 排序(当然 \(a_i\) 也要排序),这样就把二维偏序转化成了一维。(大概可以这样理解)。

接下来,我们需要判断在 \(\forall a_i \leq m\) 和 \(\sum c_i = k\) 满足后 \([\forall b_i > m + s]\) 是否成立。

这个也很好办。我们只需要将背包状态设为 \(f_i\) 表示背包容积(即放入的 \(c\))大小为 \(i\) 时 \(b\) 的最小值的最大值。只要这个最小值比 \(m + s\) 大,那么就一定合法,否则一定不合法。

最后一定注意输入顺序是 \(c, a, b\) 而不是 \(a, b, c\)!

参考代码

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio> using namespace std; const int N = 1010, M = 1000010;
struct Node {
int a, b, c;
bool operator < (const Node& tmp)const {
return a < tmp.a;
}
}p[N];
struct Queries {
int m, k, s, id;
bool operator < (const Queries& tmp)const {
return m < tmp.m;
}
}q[M];
int f[100010];
int n, m;
bool ans[M]; int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i ++ )
scanf("%d%d%d", &p[i].c, &p[i].a, &p[i].b);
sort(p + 1, p + n + 1);
scanf("%d", &m);
for (int i = 1; i <= m; i ++ )
scanf("%d%d%d", &q[i].m, &q[i].k, &q[i].s),
q[i].id = i;
sort(q + 1, q + m + 1); // 将限制 A 消除 int now = 1; f[0] = 0x3f3f3f3f;
for (int i = 1; i <= m; i ++ ) {
while (now <= n && p[now].a <= q[i].m) {
for (int j = 100000; j >= p[now].c; j -- )
f[j] = max(f[j], min(f[j - p[now].c], p[now].b)); // 背包满足限制 C
now ++ ;
}
if (f[q[i].k] > q[i].m + q[i].s) ans[q[i].id] = true; // 判断限制 B 是否满足
} for (int i = 1; i <= m; i ++ )
puts(ans[i] ? "TAK" : "NIE");
return 0;
}

P3537 [POI2012]SZA-Cloakroom 题解的更多相关文章

  1. 洛谷P3537 [POI2012]SZA-Cloakroom(背包)

    传送门 蠢了……还以为背包只能用来维护方案数呢……没想到背包这么神奇…… 我们用$dp[i]$表示当$c$的和为$i$时,所有的方案中使得最小的$b$最大时最小的$b$是多少 然后把所有的点按照$a$ ...

  2. 【洛谷】P3537 [POI2012]SZA-Cloakroom

    题目描述  有n件物品,每件物品有三个属性a[i], b[i], c[i] (a[i]<b[i]).  再给出q个询问,每个询问由非负整数m, k, s组成,问是否能够选出某些物品使得:  1. ...

  3. POI2012题解

    POI2012题解 这次的完整的\(17\)道题哟. [BZOJ2788][Poi2012]Festival 很显然可以差分约束建图.这里问的是变量最多有多少种不同的取值. 我们知道,在同一个强连通分 ...

  4. 【BZOJ2794】[Poi2012]Cloakroom 离线+背包

    [BZOJ2794][Poi2012]Cloakroom Description 有n件物品,每件物品有三个属性a[i], b[i], c[i] (a[i]<b[i]).再给出q个询问,每个询问 ...

  5. BZOJ 2794 [Poi2012]Cloakroom(离线+背包)

    2794: [Poi2012]Cloakroom Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 406  Solved: 241[Submit][St ...

  6. [BZOJ2794][Poi2012]Cloakroom

    2794: [Poi2012]Cloakroom Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 167  Solved: 119[Submit][St ...

  7. 题解:POI2012 Salaries

    题解:POI2012 Salaries Description The Byteotian Software Corporation (BSC) has \(n\) employees. In BSC ...

  8. #13【BZOJ2794】[Poi2012]Cloakroom

    题解: 感觉真是很智障..连这么简单的题都没想出来 一直在想这么做动态背包..发现不会 首先显然我们将询问按照m 序列按照a[i]排序 然后怎么满足b呢 其实很简单啊..只需要记录f[i]表示前面这些 ...

  9. [Poi2012]Festival 题解

    [Poi2012]Festival 时间限制: 1 Sec  内存限制: 64 MB 题目描述 有n个正整数X1,X2,...,Xn,再给出m1+m2个限制条件,限制分为两类: 1. 给出a,b (1 ...

  10. BZOJ2794[Poi2012]Cloakroom——离线+背包

    题目描述 有n件物品,每件物品有三个属性a[i], b[i], c[i] (a[i]<b[i]).再给出q个询问,每个询问由非负整数m, k, s组成,问是否能够选出某些物品使得:1. 对于每个 ...

随机推荐

  1. C#/.NET/.NET Core优秀项目和框架2023年9月简报

    前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(公众号每周至少推荐两个优秀的项目和框架当然节假日除外),公众号推文有项目和框架的介绍.功能特点以及部分截图等(打不开或 ...

  2. 记录 Ucharts 的使用

    1.开启 2d 渲染 线上运行开启 canvas2d 可以解决图表显示问题 <qiun-data-charts canvas2d .../> canvasId 可以不传,官方内置生成随机字 ...

  3. mooc第四单元《管理团队》单元测试

    第四单元<管理团队>单元测试 返回 本次得分为:6.00/10.00, 本次测试的提交时间为:2020-08-30, 如果你认为本次测试成绩不理想,你可以选择 再做一次 . 1 判断(2分 ...

  4. 再学Blazor——概述

    简介 Blazor 是一种 .NET 前端 Web 框架,同时支持服务器端呈现和客户端交互性. 使用 C# 语言创建丰富的交互式 UI 共享前后端应用逻辑 可以生成混合桌面和移动应用 受益于 .NET ...

  5. Unity - UIWidgets 3. 页面跳转

    Flutter的Route概念, 移动开发常指Page, 在android中指activity, ios中指viewcontroller, UGUI中常称为Panel\Form\View? 大概说的就 ...

  6. CF B. Gardener and the Array

    B. Gardener and the Array 思路:只要找到一个c他的每一位均在除了它的集合中出现过即可 这题T了2发,用来multiset,注意multiset大的时间复杂度是O(K + lo ...

  7. 「Eolink Apikit 教程」API 异常监控-创建 API 监控

    API 监控能够确保 API 的稳定性.如果一个 API 出现故障或崩溃,它可能会导致整个应用程序无法正常工作.这对用户和业务来说可能是灾难性的.通过监控 API,开发团队可以及时发现问题并采取措施来 ...

  8. 树莓派4B使用串口登录的设置方法

    -特别提示- 本文具有时效性. 当前我使用的是pi4硬件, 镜像版本 raspberrypi 5.15.61 32位. 在我解决该问题的时候, 在网上查找了很多方法, 有些方法被实际测试发现是不行的. ...

  9. 🔥🔥想快速进入人工智能领域的Java程序员?你准备好了吗?

    引言 今天我们来探讨一下作为Java程序员,如何迅速融入人工智能的领域.,当前有一些流行的LLMs选择,例如ChatGPT.科大讯飞的星火.通义千问和文心一言等.如果你还没有尝试过这些工具,那么现在也 ...

  10. 🔥🔥Java开发者的Python快速进修指南:文件操作

    Python提供的文件操作相对于Java来说,确实简单方便许多.不仅操作简单,代码可读性也相对较高.然而,我们需要注意的不仅仅是文件操作的简单性,还有文件操作的各种模式.在Java中,我们并不经常使用 ...