##题面
链接在这里(洛谷)
bzoj上是权限题哇qwq
简述题意:
有n(1&lt;=n&lt;=1000)n(1&lt;=n&lt;=1000)n(1<=n<=1000)件物品,每件物品有三个属性c[i],a[i],b[i](1&lt;=c[i]&lt;=1000,1&lt;=a[i]&lt;b[i]&lt;=109)c[i], a[i], b[i] (1&lt;=c[i]&lt;=1000, 1&lt;=a[i]&lt;b[i]&lt;=10^9)c[i],a[i],b[i](1<=c[i]<=1000,1<=a[i]<b[i]<=109)。
再给出q(q&lt;=106)q(q&lt;=10^6)q(q<=106)个询问,每个询问由非负整数m,k,s(1&lt;=m&lt;=109,1&lt;=k&lt;=105,0&lt;=s&lt;=109)m, k, s(1&lt;=m&lt;=10^9, 1&lt;=k&lt;=10^5, 0&lt;=s&lt;=10^9)m,k,s(1<=m<=109,1<=k<=105,0<=s<=109)组成,问是否能够选出某些物品使得:∀选择的物品i,a[i]&lt;=m,b[i]&gt;m+s且∑c[i]=k\forall 选择的物品i,a[i]&lt;=m , b[i]&gt;m+s且\sum c[i] = k∀选择的物品i,a[i]<=m,b[i]>m+s且∑c[i]=k。

##分析
最开始考虑的是限制条件对应一个二维线段树的区间,但是想了想好想不太能搞,合并的复杂度有点上天。
那么首先考虑退化退化版本,没有a[i]和b[i]a[i]和b[i]a[i]和b[i]的限制,那么明显是一个可达性dp
继续考虑退化版本,如果只有a[i]a[i]a[i]的限制怎么处理。
注意到一般的可达性dp中从未利用过物品的访问顺序,于是我们考虑将物品按照a[i]a[i]a[i]排序,当访问到一个a[i]a[i]a[i]的时候就把恰好大于他的询问都处理。
现在需要考虑怎么加入另一个限制。其实我们只需求一个不用离线排序的做法做刚刚那个退化问题,然后结合刚刚算法就可以了。
注意到我们另一个用的不太充分的东西是dp[i]dp[i]dp[i],一般的可达性dp中dp[i]只能是0或1dp[i]只能是0或1dp[i]只能是0或1,利用效率不高。于是令dp[i]dp[i]dp[i]表示拼出iii的数值的所有方案中,最小的b[i]b[i]b[i]最大能是几,于是我们只需在询问的时候去看dp[i]dp[i]dp[i]是否大于m+sm+sm+s即可。
于是我们解决了这个问题。

##思路总结
在对一个问题进行思考的时候,可以首先考虑思考他的退化版本,然后考虑我们有哪些条件/变量/性质/…应用不够充分,再思考能否加以利用解决更强的问题。

##代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <bits/stdc++.h>
#include <set>
#include <queue>
#define MAXN
#define ri register int
using namespace std;
/*有n件物品,每件物品有三个属性a[i], b[i], c[i] (a[i]<b[i])。
再给出q个询问,每个询问由非负整数m, k, s组成,问是否能够选出某些物品使得:
对于每个选的物品i,满足a[i]<=m且b[i]>m+s。
所有选出物品的c[i]的和正好是k。*/
int n, Q, dp[100050], ans[1000050];
struct node{int a, b, c, id;bool operator < (const node &x) const {return a < x.a;}
}obj[1050], q[1000050];
int main() {scanf("%d", &n);for(ri i = 1; i <= n; i++) scanf("%d%d%d", &obj[i].c, &obj[i].a, &obj[i].b);scanf("%d", &Q);for(ri i = 1; i <= Q; i++) scanf("%d%d%d", &q[i].a, &q[i].c, &q[i].b), q[i].id = i;sort(obj+1, obj+n+1); sort(q+1, q+Q+1);int pos = 1;dp[0] = 2e9;for(ri i = 1; i <= n; i++) {//cout<<obj[i].a<<' '<<obj[i].b<<' '<<obj[i].c<<'\n';while(q[pos].a < obj[i].a && pos <= Q) {//cout<<pos<<' '<<q[pos].a<<' '<<q[pos].b<<' '<<q[pos].c<<' '<<dp[q[pos].c]<<'\n';ans[q[pos].id] = (dp[q[pos].c] > q[pos].a+q[pos].b);pos++;}for(ri j = 100000; ~j; j--) dp[j+obj[i].c] = max(dp[j+obj[i].c], min(dp[j], obj[i].b));//for(ri j = 0; j <= 5; j++) cout<<dp[j]<<' ';//cout<<'\n';}while(pos <= Q) {//cout<<pos<<' '<<q[pos].a<<' '<<q[pos].b<<' '<<q[pos].c<<' '<<dp[q[pos].c]<<'\n';ans[q[pos].id] = (dp[q[pos].c] > q[pos].a+q[pos].b);pos++;}for(ri i = 1; i <= Q; i++) printf(ans[i]?"TAK\n":"NIE\n");return 0;
}

【POI2012】SZA-Cloakroom相关推荐

  1. 【BZOJ2797】[Poi2012]Squarks 暴力乱搞

    [BZOJ2797][Poi2012]Squarks Description 设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj. 现在所有取法共n*( ...

  2. 【BZOJ2791】[Poi2012]Rendezvous 倍增

    [BZOJ2791][Poi2012]Rendezvous Description 给定一个n个顶点的有向图,每个顶点有且仅有一条出边. 对于顶点i,记它的出边为(i, a[i]). 再给出q组询问, ...

  3. 【业界偷懒】【Public】BZOJ题目一句话题解整理

    转发[Hzwer]: 就当是复习一下自己做过的题,顺便提供一个简要题解给大家看. 做题时候实在想不出来看一下一句话题解,可以有一个提示的作用又不至于一下子知道了全部浪费了一道题吧.. 部分题目(如我A ...

  4. 【CentOS】利用Kubeadm部署Kubernetes (K8s)

    [CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...

  5. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  6. 【C#】类——里式转换

    类是由面对对象程序设计中产生的,在面向结构的程序设计例如C语言中是没有类这个概念的!C语言中有传值调用和传址调用的两种方式!在c语言中,主方法调用方法,通过传递参数等完成一些操作,其中比较常用的的数据 ...

  7. 【C#】Out与ref是干什么的?

    关于return: 1.最后没有写 return 语句的话,表示程序正常退出 2.不需要返回值时,存在return的作用 例子 void main() {return; //return退出该程序的作 ...

  8. 【软件工程】RUP与软件开发5大模型

    软件开发的5大模型 1.瀑布模型:按照人的思维一步一步的开发下去,如果需求分析得当,每个阶段顺利,结果还不错! 2.快速原型模型:后来人们发现,自己不可能一下子就把所有的需求搞清楚,总是在开发的过程中 ...

  9. 【VB】学生信息管理系统5——数据库代码

    这次学生信息管理系统在代码的理解过程中遇到了一些问题.总结如下: 1. sql server的安装过程各个步骤的意思.在安装SQL Server的时候按照网上的步骤,我觉得这个需要学完整个数据库再返回 ...

  10. 白化(预处理步骤)【转】

    白化(预处理步骤)[转] 介绍 我们已经了解了如何使用PCA降低数据维度.在一些算法中还需要一个与之相关的预处理步骤,这个预处理过程称为白化.举例来说,假设训练数据是图像,由于图像中相邻像素之间具有很 ...

最新文章

  1. 懂数学人的都认同:数学的本质[关联]万物(二)
  2. 三、索引优化(3)聚集索引上的非聚集索引
  3. python学习-- for和if结合使用
  4. Machine Learning week 6 quiz: programming assignment-Regularized Linear Regression and Bias/Variance
  5. linux——awk 报告生成器
  6. ???????????? no permissions的解决办法 解决网上方法行不通的问题
  7. 你确定自己不是那只猫吗
  8. css编写加载页面动画效果
  9. python编程例子_Python的经典入门书籍有哪些?这5本值得一看
  10. 解密Google、百度搜索引擎揭秘
  11. memcached mysql 同步,mysql中使用UDF自动同步memcached效率笔记
  12. Zotero如何更改字体大小
  13. 计算机时间校对更改原因,计算机时间校准方法
  14. linux swap交换分区
  15. 微信小程序 php解密,微信小程序des加密、PHP des解密
  16. 用verilog编写按键消抖代码
  17. 怎样去除图片水印?教你一个一键去除水印的方法
  18. VS中无法解析的外部命令的解决办法
  19. python入门——python基础语法
  20. 将Google Analytics for Firebase数据导入BigQuery

热门文章

  1. 解决win10无法启用文件和打印机共享功能,你可能没有权限使用网络资源。请与这台服务器的管理员联系以查明你是否有访问权限
  2. hackthebox - frolic (考点: 信息搜集 ook解密 base解密 zip 解密 xxd解密 brainfuck解密 playsms安全)
  3. 音响常见故障如何解决?
  4. Allure趋势图本地显示
  5. 服务器删除的excel文件备份在哪里,microsoft excel备份文件在哪 - 卡饭网
  6. 2022年软件测试有哪些趋势?
  7. hdu5773 2016年多校4 nlogn求LIS
  8. 基于Java的奖学金评定系统的设计
  9. lzg_ad:CMD下打开控制面板
  10. java 代码块 构造函数_Java学习笔记之------构造函数,静态关键字,静态代码块,构造代...