bzoj2794 [Poi2012]Cloakroom

原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=2794

题意:
有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。

Input

第一行一个正整数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)。

Output
输出q行,每行为TAK (yes)或NIE (no),第i行对应第i此询问的答案。

Sample Input
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

Sample Output
TAK
NIE
TAK
TAK
NIE

数据范围
n<=1,000,c[i]<=1,000, 1<=a[i] < b[i]<=10^9,q<=1,000,000

题解:
q<=1,000,000,看着就是离线。
现在我们要求三个条件:
1.a[i]<=m
2.b[i]>m+s
3.c[i]和为k
如果我们通过离线来减少约束,那显然是物品按a[i]排序,询问按m排序,每到一个询问,继续把符合(1)的物品加入背包。
那么只要看有没有 所有b[i]>m+s且c[i]和为k的方案即可。

这里给出的方式是f[i]维护的是和刚好为i时,所有方案中,使最小的b值最大的方案 的b值。
这样只需在每次添加完后,看看f[k]是否大于m+s即可。

(这是一个我一直没想到的地方,思路比较僵,总以为背包只能存价值或方案数,而没想到其变式其实可以有很多。最终应该由题目去想问题,不是这个算法可以求什么)

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1010;
const int M=1000010;
const int inf=1e9+7;
struct node
{int a,b,c;
}w[M];
bool cmp1(const node &A,const node &B)
{return A.a<B.a;
}
struct query
{int m,k,s,note;
}Q[M];
bool cmp2(const query &A,const query &B)
{return A.m<B.m;
}
int n,q,f[M],ans[M];
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d%d",&w[i].c,&w[i].a,&w[i].b);sort(w+1,w+n+1,cmp1);scanf("%d",&q);int top=100000;for(int i=1;i<=q;i++){scanf("%d%d%d",&Q[i].m,&Q[i].k,&Q[i].s);Q[i].note=i; }sort(Q+1,Q+q+1,cmp2);int tmp=1;f[0]=inf;for(int i=1;i<=q;i++){while(tmp<=n&&w[tmp].a<=Q[i].m) {for(int j=top;j>=w[tmp].c;j--)f[j]=max(f[j],min(f[j-w[tmp].c],w[tmp].b)); tmp++;}if(f[Q[i].k]>Q[i].m+Q[i].s) ans[Q[i].note]=1;}for(int i=1;i<=q;i++){if(ans[i]) printf("TAK\n");else printf("NIE\n");}return 0;
}

bzoj2794 [Poi2012]Cloakroom ( 背包DP+离线 )相关推荐

  1. 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序

    [题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...

  2. 背包dp的核心思想(动态规划)

    背包dp 突然发现我一直没有真正理解背包,真正的背包应该是用空间换时间的一种dp方法,本质上就是n个物品选或不选,理论上有2n2^n2n种可能结果,但是背包利用的就是值域很小这一特点来重叠子结构,所以 ...

  3. Codeforces 864E Fire(背包DP)

    背包DP,决策的时候记一下 jc[i][j]=1 表示第i个物品容量为j的时候要选,输出方案的时候倒推就好了 #include<iostream> #include<cstdlib& ...

  4. 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp

    题目描述 给你一棵 $n$ 层的完全二叉树,每个节点可以染黑白两种颜色.对于每个叶子节点及其某个祖先节点,如果它们均为黑色则有一个贡献值,如果均为白色则有另一个贡献值.要求黑色的叶子节点数目不超过 $ ...

  5. HDU 1011 Starship Troopers 树形+背包dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1011   题意:每个节点有两个值bug和brain,当清扫该节点的所有bug时就得到brain值,只有当父节点被 ...

  6. 【bzoj1222】[HNOI2001]产品加工 背包dp

    题目描述 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机器共同进行加工 ...

  7. 【bzoj4753】[Jsoi2016]最佳团体 分数规划+树形背包dp

    题目描述 JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号.每个候选人都由一位编号比他小的候选人Ri推荐.如果Ri=0则说明这个候选人是JYY自己看上的.为了 ...

  8. 【bzoj5072】[Lydsy十月月赛]小A的树 树形背包dp

    题目描述 给出一棵n个点的树,每个点有黑白两种颜色.q次询问,每次询问给出x和y,问能否选出一个x个点的联通子图,使得其中黑点数目为y. 输入 第一行一个正整数 T 表示数据组数. 对于每一组数据,第 ...

  9. 【背包DP练习】洛谷 P5020货币系统 P1757通天之分组背包 P1064[NOIP2006 提高组]金明的预算方案 P5322 [BJOI2019]排兵布阵

    洛谷 P5020货币系统 https://www.luogu.com.cn/problem/P5020 思路是把货币从小到大排序,然后按顺序依次完全背包dp,每次dp检查i-1种面值的货币能不能凑出第 ...

  10. hdu 5234 Happy birthday 背包 dp

    Happy birthday Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...

最新文章

  1. 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测大气压( air pressure)+代码实战
  2. VMware 虚拟化编程(9) — VMware 虚拟机的快照
  3. list contains方法_Java中给List去重的5种方法,谁的效率更高?
  4. BERT, ELMo, GPT-2: 这些上下文相关的表示到底有多上下文化?
  5. 第二章:java_基本语法_3 运算符
  6. .NET 也有 Husky 了
  7. Jirasearch 2.0狗粮:使用Lucene查找我们的Jira问题
  8. php 五颗星评价,简单实现点触/输入值给五颗星评价
  9. 最近点对模板__hdu1007
  10. 学android开发,入门语言JAVA知识点
  11. Android手机打造你的PythonJava开发工具!
  12. Linux三剑客正则表达式常用字符汇总
  13. vasp软件全名是什么_vasp软件使用
  14. E66 PC套件因多个USB的连接导致连接不上问题解决办法
  15. JS特效三:LightBox(轮播图+图片弹窗)
  16. PR视频去水印—中间值
  17. 【毛球科技】食品供应链的可持续性挑战
  18. [0.0]-AutoSAR零基础学习-专栏介绍
  19. 硬件电路设计之如何设计一个STM32最小系统?
  20. 为什么Markdown+R有较大概率成为科技写作主流? ← 阳志平的个人网站::技术

热门文章

  1. 低电平译码器LS138设计
  2. 华为路由器 wifi网速慢解决办法
  3. 大数据处理框架的类型、比较和选择
  4. 收集45个实用的免费LOGO在线制作网站
  5. 【Vue知识点】路由router详解
  6. Router的路由表
  7. 奖学金评审系统java_奖学金评定系统 - WEB源码|源代码 - 源码中国
  8. 2016预测哪些公司增值最猛?
  9. 天津大学2020年考研考前公告
  10. 计算电路门数和nand2的面积