2794: [Poi2012]Cloakroom

Time Limit: 20 Sec  Memory Limit: 128 MB
Submit: 406  Solved: 241
[Submit][Status][Discuss]

Description

有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

HINT

题解

这题还行。

看了一会,自信满满,然后就死了。

离线把询问按s排序。把每一个物品按a[i]排序。

然后dp[i]代表当c的和能凑成i时所用的物品b的最小值的最大值。

因为排序后每一个物品只需计算一次,所以复杂度没有飞。(但至少我看来有问题)

所以对于每一个询问,只需判断dp[k]是否大于m+s就行了。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
struct thing{
int c,a,b;
}g[];
struct query{
int l,r,k,id;
}q[];
int n,t,dp[],ans[],mx;
bool cmp(thing a,thing b){
return a.a<b.a;
}
bool mmp(query a,query b){
return a.l<b.l;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d%d%d",&g[i].c,&g[i].a,&g[i].b);
}
scanf("%d",&t);
for(int i=;i<=t;i++){
int s,k,m;
scanf("%d%d%d",&s,&k,&m);
q[i].l=s;
q[i].r=s+m;
q[i].k=k;
q[i].id=i;
mx=max(mx,k);
}
sort(g+,g++n,cmp);
sort(q+,q++t,mmp);
dp[]=;
for(int i=,now=;i<=t;i++){
while(now<=n&&g[now].a<=q[i].l){
for(int j=mx;j>=g[now].c;j--){
dp[j]=max(dp[j],min(dp[j-g[now].c],g[now].b));
}
now++;
}
ans[q[i].id]=(q[i].r<dp[q[i].k]);
}
for(int i=;i<=t;i++){
if(ans[i])printf("TAK\n");
else printf("NIE\n");
}
return ;
}

BZOJ 2794 [Poi2012]Cloakroom(离线+背包)的更多相关文章

  1. bzoj 2794 [Poi2012]Cloakroom 离线+背包

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

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

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

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

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

  4. [BZOJ2794][Poi2012]Cloakroom

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

  5. bzoj 2794: Cloakroom dp

    题目: 有\(n\)件物品,每件物品有三个属性\(a_i,b_i,c_i,(a_i < b_i)\) 再给出\(q\)个询问,每个询问由非负整数\(m,k,s\)组成,问是否能够选出某些物品使得 ...

  6. Bzoj 2789: [Poi2012]Letters 树状数组,逆序对

    2789: [Poi2012]Letters Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 278  Solved: 185[Submit][Stat ...

  7. BZOJ 2794 DP

    思路: 考虑把询问离线 按照m排序 物品按照a排序 f[i]表示c[j]的和到i b的最大值 背包就好 O(nk)竟然能过-- //By SiriusRen #include <cstdio&g ...

  8. bzoj 3626: [LNOI2014]LCA 离线+树链剖分

    3626: [LNOI2014]LCA Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 426  Solved: 124[Submit][Status] ...

  9. BZOJ 1042: [HAOI2008]硬币购物( 背包dp + 容斥原理 )

    先按完全背包做一次dp, dp(x)表示x元的东西有多少种方案, 然后再容斥一下. ---------------------------------------------------------- ...

随机推荐

  1. Imperative programming

    In computer science, imperative programming is a programming paradigm that uses statements that chan ...

  2. Json扩展 (转)

    https://www.newtonsoft.com/json https://www.cnblogs.com/BrokenIce/p/5902441.html https://blog.csdn.n ...

  3. 11 个使用 GNOME 3 桌面环境的理由

    11 个使用 GNOME 3 桌面环境的理由 作者: David Both 译者: LCTT geekpi | 2017-08-22 11:43   评论: 27 GNOME 3 桌面的设计目的是简单 ...

  4. LayUI中实现上级下拉框动态加载下级下拉框js

    js代码: var form = layui.form, layer = layui.layer; form.on("select(上级)", function(data){ va ...

  5. (转载)spring 之间的远程调用-Spring Http调用的实现

    原文:https://www.cnblogs.com/lewisat/p/6132082.html 1:Spring Http设计思想 最近在研究公司自己的一套rpc远程调用框架,看到其内部实现的设计 ...

  6. 【【henuacm2016级暑期训练】动态规划专题 O】Robot Rapping Results Report

    [链接] 我是链接,点我呀:) [题意] 让你确定一个最小的k 使得1..k这些比赛的结果能够推导出所有人之间的实力大小 [题解] 如果关系越多.那么就越能确定所有人之间的大小关系. (多一点也能唯一 ...

  7. MySQL创建表时加入的约束以及外键约束的的意义

    1,创建表时加入的约束 a) 非空约束,not null b) 唯一约束,unique c) 主键约束,primary key d) 外键约束,foreign key 1,非空约束,针对某个字段设置其 ...

  8. oracle间隔分区

    http://blog.csdn.net/rznice/article/details/55048876

  9. angular-HTTP

    AngularJS $http 是一个用于读取web服务器上数据的服务. $http.get(url) 是用于读取服务器数据的函数. <div ng-app="myApp" ...

  10. HDU 2475 Box 树型转线型 + 伸展树

    树型转线型.第一次听说这个概念. . . , 可是曾经已经接触过了,如LCA的预处理部分和树链剖分等.可是没想到还能这么用,三者虽说有不同可是大体思想还是非常相近的,学习了. 推荐博客http://b ...