Task
有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<=1,000, q<=1,000,000.
c[i]<=1,000, 1<=a[i]<b[i]<=10^9
1<=m<=10^9, 1<=k<=100,000, 0<=s<=10^9

Solution
 离线.
 把询问和节点都根据左端点排序,保证询问[l,r]时,所有考虑的物品的左端点都满足条件.满足左端点的物品个数是不断增加的,一旦满足,接下来所有询问都会满足.那么现在只用考虑右端点了.
 直接确定所有物品再进行01背包肯定不行.那么考虑新思路.假如因为现在可选物品的范围一直增大,我们可以对当前物品的信息进行记录.由于k并不大,可以考虑把k存入下标:
 设dp[x]为当前价值构成x最远的b[i].
 对于询问可以直接判断dp[k]与m+s的关系,
 对于更新,用01背包进行更新即可.

题外话:
这道题的思路来源于BestCoder round#86 1005(hdu5808,题解戳这,题目链接戳这)的思路,都是询问一些符合范围的物品价值是否能够达到k.而且思路也是相近的,只不过BC的这道题信息多一维,用了分治来优化,思路更复杂一些.

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#define ll long long
#include<queue>
#include<set>
using namespace std;
inline void rd(int &res){res=0;char c;while(c=getchar(),c<48);do res=(res<<1)+(res<<3)+(c^48);while(c=getchar(),c>=48);
}
inline void print(ll x){if(!x)return ;print(x/10);putchar((x%10)^48);
}
inline void sc(ll x){if(x<0){x=-x;putchar('-');}print(x);if(!x)putchar('0');putchar('\n');
}
inline void Max(int &x,int y){if(x<y)x=y;}
inline void Min(int &x,int y){if(x>y)x=y;}
const int M=1005;
const int N=1e6+5;
const int P=100000;
int dp[P+5],n,m,ans[N];
char s[2][3];
struct node{int l,r,v,id;node(){id=-1;}bool operator<(const node &tmp)const{if(l!=tmp.l)return l<tmp.l;return id<tmp.id;}
}A[M+N];
void pt(int c){for(int i=0;i<3;i++)putchar(s[c][i]);putchar('\n');
}
int main(){int n,i,j,mx=0,sum=0,cas,a,b,k;memset(dp,-1,sizeof(dp));rd(n);s[0][0]='N',s[0][1]='I',s[0][2]='E';s[1][0]='T',s[1][1]='A',s[1][2]='K';for(i=1;i<=n;i++){rd(A[i].v);rd(A[i].l);rd(A[i].r);Max(mx,A[i].r);}rd(m);for(i=1;i<=m;i++){rd(A[i+n].l);rd(A[i+n].v);rd(A[i+n].r);A[i+n].r+=A[i+n].l;A[i+n].id=i;}sort(A+1,A+1+n+m);dp[0]=mx+1;for(i=1;i<=n+m;i++){int l=A[i].l,r=A[i].r,v=A[i].v,id=A[i].id;if(~id){//询问 if(~dp[v]&&dp[v]>r)ans[id]=1;else ans[id]=0;continue;}//update (j+v)<=P  j<=P-v for(j=min(P-v,sum);j>=0;j--){if(~dp[j])Max(dp[v+j],min(dp[j],r));//更新dp值}sum+=v;}for(i=1;i<=m;i++)pt(ans[i]);return 0;
}

BZOJ2794/POI2012 Cloakroom相关推荐

  1. 一句话题解(20170801~20170125)

    8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...

  2. Bzoj3060 [Poi2012]Tour de Byteotia

    3060: [Poi2012]Tour de Byteotia Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 251  Solved: 161 De ...

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

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

  4. BZOJ 2788[Poi2012]Festival

    题面: 2788: [Poi2012]Festival Time Limit: 30 Sec  Memory Limit: 64 MB Submit: 418  Solved: 190 [Submit ...

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

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

  6. 【BZOJ2791】[Poi2012]Rendezvous 倍增

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

  7. bzoj 2803: [Poi2012]Prefixuffix(双Hash)

    2803: [Poi2012]Prefixuffix Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 413  Solved: 167 [Submit] ...

  8. P3540 [POI2012]SQU-Squarks

    题目传送门:P3540 [POI2012]SQU-Squarks 题面解释的非常不清楚,总之就是有 nnn 个数,x[]x[]x[],它们两两组合,对每一对求和,放到 a[]a[]a[] 里,此时 a ...

  9. [BZOJ2796][Poi2012]Fibonacci Representation

    由于是斐波那契数列,所以$x_i+x_j<=x_k,i<j<k$ 所以猜测可以贪心选择两边近的数处理. 1 #include<cstdio> 2 #include< ...

  10. BZOJ 2793: [Poi2012]Vouchers(调和级数)

    Time Limit: 20 Sec  Memory Limit: 64 MB Submit: 582  Solved: 250 [Submit][Status][Discuss] Descripti ...

最新文章

  1. python lambda map reduce_python:lambda、filter、map、reduce
  2. webpack入门学习手记(一)
  3. w7计算机的工具栏爱那里,Win7系统如何在任务栏中添加爱心图标图文教程
  4. 建设研发运营一体化平台
  5. Linux学习笔记-消息队列的打开、创建、控制
  6. Mr.J-- jQuery学习笔记(六)--attrprop方法
  7. Android中Menu的基本用法
  8. composer 更新php位置,使用composer安装/更新PHP包
  9. 数据库面试题之PL/SQL面试题
  10. mysql查询表字段的个数
  11. 木马文件slader以及各种捆绑木马、流氓软件
  12. 1319 移棋子游戏(sg函数模板)
  13. linux下dns测试命令
  14. 【MySQL必知必会--理论】
  15. Tampermonkey中文文档
  16. CIC-IDS-2018数据集分析笔记
  17. 10个SaaS的常见问题解答告诉你SaaS是什么
  18. Android_8.1 Log 系统源码分析
  19. 【北邮国院大二下】产品开发与营销知识点整理 Topic7
  20. Java数据对象(JDO)的前世今生

热门文章

  1. 2019/7/31随笔
  2. Virtual Private Network(虚拟专用网络)详解
  3. 腾讯android一键root工具,腾讯一键Root工具
  4. NewtonJson 的一个例子
  5. H3C交换机POE固件版本升级流程
  6. 计算机强制关机后重启报错,电脑开起来就自动关机
  7. 重新启动计算机的方法有,如何取消电脑自动更新后的重新启动计算机提示
  8. excel怎么一个格子斜分_表格excel怎样把一格用斜线分为三格
  9. 菜鸟好文推荐(七)——他改了密码,姑娘说了“Yes, I do”
  10. 仿QQ聊天界面里边的相册(QQ相册)