题目描述
  有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. 【hive】centos7下apache-hive-3.1.2-bin的安装测试

    前言:安装hive还是遇见些问题,但还好都解决了,比当初安装配置hadoop-3.2.0容易点...... 正文: 1.下载并安装hive:tar -zxvf apache-hive-3.1.2-bi ...

  2. Redis配置文件详情

    # Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写) # # 1k => bytes # 1kb => ...

  3. 3D中OBJ文件格式详解

    常见到的*.obj文件有两种:第一种是基于COFF(Common Object File Format)格式的OBJ文件(也称目标文件),这种格式用于编译应用程序:第二种是Alias|Wavefron ...

  4. simpleDateFormat中格式化时间需要注意的问题

    student.getDateProperty("business","birth","yyyy-MM-dd",null)测试时  时间格式 ...

  5. 16.centos7基础学习与积累-002

    1.从头开始积累centos7系统运用 大牛博客:https://blog.51cto.com/yangrong/p5 互联网公司服务器品牌: dell 服务器品牌: 1U=4.45CM 2010年以 ...

  6. http://www.easytest.xyz/login_action/

    http://www.easytest.xyz/login_action/一个挺牛逼的系统,有空学习下 https://www.cnblogs.com/1fengchen1/archive/2019/ ...

  7. JVM参数优化(基础篇)

    原文:https://www.howardliu.cn/java/jvm-tuning-basic/ 这几天压测预生产环境,发现TPS各种不稳.因为是重构的系统,据说原来的系统在高并发的时候一点问题没 ...

  8. samba简单配置

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB (Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种 ...

  9. c++ default关键字

    PicServer() = default;   ~PicServer() = default; CString 似乎也可以写出来, https://blog.csdn.net/a1875566250 ...

  10. dns-prefetch应用好,网上速度能提高一半!

    今天一个朋友给我说在网页上添加dns-prefetch,网页访问速度能提高,于是我百度查询关于dns-prefetch. DNS Prefetch,即DNS预获取,是前端优化的一部分.一般来说,在前端 ...