首页 > 其他分享 >[POI2012] Cloakroom - Solution

[POI2012] Cloakroom - Solution

时间:2024-10-21 20:43:09浏览次数:1  
标签:10 le POI2012 max Solution Cloakroom int 物品 DP

POI2012 Cloakroom

题目描述(搬自洛谷)

有 \(n\) 件物品,每件物品有三个属性 \(a_i, b_i, c_i\ (a_i<b_i)\)。

再给出 \(q\) 个询问,每个询问由非负整数 \(m, k, s\) 组成,问是否能够选出某些物品使得:

  1. 对于每个选的物品 \(i\),满足 \(a_i\le m\) 且 \(b_i>m+s\)。
  2. 所有选出物品的 \(c_i\) 的和正好是 \(k\)。

\(1\le n\le 1000\),\(1\le a_i<b_i\le 10^9\),\(1\le c_i\le 1000\)。

\(1\le q\le 10^6\),\(1\le m\le 10^9\),\(1\le k\le 10^5\),\(0\le s\le 10^9\)。

思路

注意到每个物品有三个属性,于是将其分开考虑:

  1. 对于 \(c_i\) 的限制,考虑 01 背包。

  2. 对于 \(a_i\) 的限制,考虑离线、放到时间维度上做。

    具体地:我们称对于物品 \(i\) 进行背包 DP 为「将 \(i\) 添加进 DP 数组」。

    将物品按 \(a_i\) 从小到大排序,依次添加进 DP 数组。若在某一时刻所有 \(a_i \le m\) 的物品 \(i\) 都被添加了,那么便可回答当前询问。将询问按 \(m\) 从小到大排序即可。

  3. 发现 01 背包的 DP 值是布尔,信息非常有限;于是对于 \(b_i\) 的限制,考虑将其塞进 DP 的值里。

    设被选的物品集合为 \(S\)。注意到,\(\forall i \in S\) 都有 \(b_i > m+s\),等价于 \(\min \{b_i\} > m+s\)。

    设 \(f(i,j)\) 表示前 \(i\) 个物品,正好凑出 \(j\) 的方案中,\(\min b_i\) 的最大值。

    此部分时间复杂度为 \(\mathcal O(n \cdot \max k)\),使用滚动或压维技巧,即可将空间复杂度优化为 \(\mathcal O(\max k)\)。

代码实现

#include <bits/stdc++.h>
using namespace std;

const int N=1e3+5, M=1e6+5, K=2e5+5;

int n,q,f[K],ans[M];

struct item{
	int a,b,c;
	bool operator<(const item &_) const{
		return a<_.a;
	}
}a[N];

struct qry{
	int L,R,k,id;
	bool operator<(const qry &_) const{
		return L<_.L;
	}
}b[M];

template<typename T>
	inline T max_eq(T &x,T y){
		return x= x>y? x:y;
	}
	
void dp(int i){
	for(int j=1e5;j>=0;--j)
		max_eq(f[j+a[i].c],min(f[j],a[i].b));
}

int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
		scanf("%d%d%d",&a[i].c,&a[i].a,&a[i].b);
	scanf("%d",&q);
	for(int i=1;i<=q;++i){
		int range;
		scanf("%d%d%d",&b[i].L,&b[i].k,&range);
		b[i].R=b[i].L+range, b[i].id=i;
	}
	
	sort(a+1,a+n+1);
	sort(b+1,b+q+1);
	f[0]=INT_MAX;
	for(int i=1,x=0;i<=q;++i){
		while(x<n&&a[x+1].a<=b[i].L) dp(++x);
		ans[b[i].id]= f[b[i].k]>b[i].R;
	}
	for(int i=1;i<=q;++i) puts(ans[i]? "TAK":"NIE");
	return 0;
}

标签:10,le,POI2012,max,Solution,Cloakroom,int,物品,DP
From: https://www.cnblogs.com/Greenz-cxz/p/18490337/sol_lg_3537

相关文章

  • [ARC185A] mod M Game 2 Solution
    ARC185A-modMGame2简要题意Alice和Bob玩卡牌游戏。每个人都有一副\(N\)张卡牌,分别标上数字\(1\simN\)。现从Alice开始,两人轮流出牌放入牌堆,每人每局恰好出一张牌,出过的牌不能再出;如果在某一时刻,牌堆里所有牌的数字总和是\(M(N<M)\)的倍数,则刚刚出牌的玩家输,......
  • 【题解】Solution Set - NOIP2024集训Day57 字符串
    【题解】SolutionSet-NOIP2024集训Day57字符串https://www.becoder.com.cn/contest/5653「CF213E」TwoPermutations「CF961F」k-substrings「CF580E」KefaandWatch「CF504E」MishaandLCPonTree......
  • Solution of CF1842C
    Briefdescriptionofthetitle若\(a_i=a_j\)且\(1\lei<j\le|a|\)。则删除\(a_{i}\)到\(a_j\)所有数。求出能删除数列中的数的最大数量。Solution考虑动态规划:状态:\(f_i\)表示前\(i\)个数里面最多能删除多少个数。\(maxn_{a_i}\)表示对于数\(a_i\),满足\(a......
  • P10992 Solution
    DescriptionLinkSolution好题。本题主要有两个问题:哈希函数的设计和子串的枚举。作为哈希题的套路,首先可以想到二分答案长度,再做check。考虑如何设计哈希函数来check。令二分出的长度为\(len\)。设计出的哈希函数需要满足两个条件:两个串对应的字符集相同,对应字符集的下......
  • 【题解】Solution Set - NOIP2024集训Day56 哈希杂题
    【题解】SolutionSet-NOIP2024集训Day56哈希杂题https://www.becoder.com.cn/contest/5640「CF568C」NewLanguage做过的2-sat。「NOI2024」集合做过。做法见提交记录。「CSP-S2022」星战简要题意:给定有向图。修改使一条边失效/恢复;使一个点的所有入边......
  • Solution - Codeforces 1628D2 Game on Sum (Hard Version)
    首先来考虑Easy。注意到的是最后输出的答案要求是模意义下的,这说明对于实数二分的做法都已经用不了了。注意到\(n,m\le3000\)的数据范围,于是一个想法就是考虑DP之类的算法。考虑到B选了\(+/-\)实际上就代表着下一轮的\(m\)是否会\(-1\),于是可以设状态为\(f_{i......
  • 【题解】Solution Set - NOIP2024集训Day50 图的连通性相关
    【题解】SolutionSet-NOIP2024集训Day50图的连通性相关https://www.becoder.com.cn/contest/5618「JSOI2012」越狱老虎桥简述题意:题目大意:给定一张图,A先添加\(1\)条边,B再删去一条边使得图不连通,A要最大化删除边的权值,B要最小化删除边的权值,问最终的权值是多少。......
  • AME 209/MSE 280 solution
    AME209/MSE280Homework4Fall2024Thehomework4solutionwillonlyincludetwom-files,oneforeachofthefollowingproblems.NoPDFwriteupisneededforthisassignment.Nameyoursolutionfiles:hw04_prob1_NNNN.mhw04_prob2_NNNN.msubstitutingthelast......
  • Solution - Codeforces 622E Ants in Leaves
    首先因为\(1\)点是可以一次性到多个点的,因此不需要考虑\(1\)点的情况,而是转而分析\(1\)的每个子树的情况,最后取\(\max\)。那么对于每个子树,就有每个节点每个时刻至多存在\(1\)个点的性质了。考虑如何去求解。首先一个贪心的想法是肯定是每个蚂蚁越早到一个点越好。于......
  • PageRank parallel solutions
    Assignment4 DueFridayby11:59pmPoints70 SubmittingafileuploadAvailableOct4at12am-Dec24at11:59pmStartAssignment Assignment4(70Points) ueFridayOctober11@11:59PMInthisassignment,wewillimprovetheparallelsolutionsofPageRa......