题目描述
  有n件物品,每件物品有三个属性a[i], b[i], c[i] (a[i]<b[i])。
  再给出q个询问,每个询问由非负整数m, k, s组成,问是否能够选出某些物品使得:
  1. 对于每个选的物品i,满足a[i]<=m且b[i]>m+s。
  2. 所有选出物品的c[i]的和正好是k。    
输入格式
  第一行一个正整数n (n<=1,000),接下来n行每行三个正整数,分别表示c[i], a[i], b[i] (c[i]<=1,000, 1<=a[i]<b[i]<=10^9)。
  下面一行一个正整数q (q<=1,000,000),接下来q行每行三个非负整数m, k, s (1<=m<=10^9, 1<=k<=100,000, 0<=s<=10^9)。
  输出格式
  输出q行,每行为TAK (yes)或NIE (no),第i行对应第i此询问的答案。

输入样例

5
6 2 7
5 4 9
1 2 4
2 5 8
1 3 9
5
2 7 1
2 7 2
3 2 0
5 7 2
4 1 5

输出样例

TAK

NIE

TAK

TAK

NIE

分析

看起来像个背包,但是它是有限制的。

所以这并不是难不难的问题,它就是那种,被大佬们称作‘有限制的背包问题’的东西

由于物品无序,所以对于第一个限制,可以按a从小到大排序,一个一个放入背包并记录,回答时直接二分一下位置就好了。

我们发现这个题目比以往的题目少了一条限制,即物品的个数。

而且k很小,这个题只需要回答yes和no

所以直接考虑dp[i][j],表示选前i个物品c的和为j时,所用物品的b的最大值,直接转移即可

这样的话,对于每个问题,

第一个限制直接二分得到a中最后一个小于等于m的位置i

第二个直接看dp[i][k]是否大于m+s,大于则输出yes,反之输出no。

但发现好像内存开不下,所以离线处理询问,再像完全背包一样去dp,一边做一边记录答案

代码如下,感觉细节贼多。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
struct node{int m,k,s,id;}que[];
int n,Q,a[maxn],b[maxn],c[maxn],q[maxn],w[maxn],ans[],dp[];
bool cmp(int x,int y){return a[x]<a[y];}
bool cmp1(node a,node b){return a.m<b.m;}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d%d%d",&c[i],&a[i],&b[i]),w[i]=a[q[i]=i];
scanf("%d",&Q);for(int i=;i<=Q;i++)scanf("%d%d%d",&que[i].m,&que[i].k,&que[i].s),que[i].id=i;
sort(w+,w++n);sort(q+,q++n,cmp);sort(que+,que++Q,cmp1);
int K=;
dp[]=1e9;
for(int i=,sum=;i<=n;i++)
{
while(K<=Q&&que[K].m<w[i])ans[que[K].id]=(dp[que[K].k]>que[K].m+que[K].s),K++;
sum+=c[q[i]];sum=min(sum,);
for(int j=sum;j>=c[q[i]];j--)
dp[j]=max(dp[j],min(dp[j-c[q[i]]],b[q[i]]));
}
while(K<=Q)ans[que[K].id]=(dp[que[K].k]>que[K].m+que[K].s),K++;
for(int i=;i<=Q;i++)if(ans[i])puts("TAK");else puts("NIE");
}

【洛谷】P3537 [POI2012]SZA-Cloakroom的更多相关文章

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

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

  2. 洛谷 P3539 [POI2012]ROZ-Fibonacci Representation 解题报告

    P3539 [POI2012]ROZ-Fibonacci Representation 题意:给一个数,问最少可以用几个斐波那契数加加减减凑出来 多组数据10 数据范围1e17 第一次瞬间yy出做法, ...

  3. 洛谷P3533 [POI2012]RAN-Rendezvous

    P3533 [POI2012]RAN-Rendezvous 题目描述 Byteasar is a ranger who works in the Arrow Cave - a famous rende ...

  4. BZOJ2801/洛谷P3544 [POI2012]BEZ-Minimalist Security(题目性质发掘+图的遍历+解不等式组)

    题面戳这 化下题面给的式子: \(z_u+z_v=p_u+p_v-b_{u,v}\) 发现\(p_u+p_v-b_{u,v}\)是确定的,所以只要确定了一个点\(i\)的权值\(x_i\),和它在同一 ...

  5. 洛谷P3538 [POI2012]OKR-A Horrible Poem [字符串hash]

    题目传送门 A Horrible Poem 题目描述 Bytie boy has to learn a fragment of a certain poem by heart. The poem, f ...

  6. 洛谷P3539 [POI2012] ROZ-Fibonacci Representation

    题目传送门 转载自:five20,转载请注明出处 本来看到这题,蒟蒻是真心没有把握的,还是five20大佬巨orz 首先由于斐波拉契数的前两项是1,1 ,所以易得对于任何整数必能写成多个斐波拉契数加减 ...

  7. 洛谷P3531 [POI2012]LIT-Letters

    题目描述 Little Johnny has a very long surname. Yet he is not the only such person in his milieu. As it ...

  8. 洛谷P3534 [POI2012] STU

    题目 二分好题 首先用二分找最小的绝对值差,对于每个a[i]都两个方向扫一遍,先都改成差满足的形式,然后再找a[k]等于0的情况,发现如果a[k]要变成0,则从他到左右两个方向上必会有两个连续的区间也 ...

  9. 【洛谷3546_BZOJ2803】[POI2012]PRE-Prefixuffix(String Hash)

    Problem: 洛谷3546 Analysis: I gave up and saw other's solution when I had nearly thought of the method ...

  10. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

随机推荐

  1. mybatis generator对于同一个表生成多次代码的问题

    原文:https://blog.csdn.net/jiangjun0130/article/details/83055336 现象: mybatis generator是一个持久层代码自动生成工具,能 ...

  2. 使用 Code First 数据库迁移

    当 Entity Framework Code First 的数据模型发生改变时,默认会引发一个System.InvalidOperationException 的异常.解决方法是使用DropCrea ...

  3. ZeroMQ自查手册

    简介 ZMQ (以下 ZeroMQ 简称 ZMQ)是一个简单好用的传输层,像框架一样的一个 socket library,他使得 Socket 编程更加简单.简洁和性能更高.是一个消息处理队列库,可在 ...

  4. 亲密字符串之Javascript解法

    本题为leetcode第859题,原题链接在此:https://leetcode-cn.com/problems/buddy-strings/submissions/ 给定两个由小写字母构成的字符串  ...

  5. 【雅思】【绿宝书错词本】List13~24

    List 13 ❤audacious a.大胆的:有冒险精神的:鲁莽的:厚颜无耻的 ❤tramp v.跋涉:踩踏 n.长途跋涉 ❤lexicographer n.词典编纂者 ❤manipulate v ...

  6. Spring boot集成Websocket,前端监听心跳实现

    第一:引入jar 由于项目是springboot的项目所以我这边简单的应用了springboot自带的socket jar <dependency> <groupId>org. ...

  7. 3.XPath

    使用XPath可以在不遍历xml文档的情况下选择具体节点. 转自https://www.cnblogs.com/vaevvaev/p/6928201.html XPath可以快速定位到Xml中的节点或 ...

  8. P1801 黑匣子[堆]

    题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两种: ...

  9. jdk1.8换成11,启动项目报错java.net.MalformedURLException: unknown protocol: jrt

    jdk11 Information:Internal caches are corrupted or have outdated format, forcing project rebuild: Mo ...

  10. python3.7内置函数整理笔记

    #python3.7 内置函数整理 #abs(x) #返回数字的绝对值. 参数可以是整数或浮点数. 如果参数是复数,则返回其大小 # print(abs(1)) # print(abs(-1)) # ...