[题解][P4799 CEOI2015 Day2]世界冰球锦标赛 发现买票顺序和答案无关,又发现\(n\le40\),又发现从后面往前面买可以通过\(M\)来和从前面往后面买的方案进行联系.可以知道是双搜. 从后往前搜索,\(2^{\frac{n}{2}}\)枚举记录到中间时剩下多少钱的方案,记为\(hash_1\),从前往后搜索,记录到中间花了多少钱的方案,记为\(hash_2\).然后在\(hash_2\)中查询小于等于\(hash_{2_{i}}\)的方案有多少. #include<ios…
\(\color{#0066ff}{题目描述}\) 今年的世界冰球锦标赛在捷克举行.Bobek 已经抵达布拉格,他不是任何团队的粉丝,也没有时间观念.他只是单纯的想去看几场比赛.如果他有足够的钱,他会去看所有的比赛.不幸的是,他的财产十分有限,他决定把所有财产都用来买门票. 给出 Bobek 的预算和每场比赛的票价,试求:如果总票价不超过预算,他有多少种观赛方案.如果存在以其中一种方案观看某场比赛而另一种方案不观看,则认为这两种方案不同. \(\color{#0066ff}{输入格式}\) 第一…
题目很明确,不超过预算的方案数.两个直觉:1.暴搜2.dp 每个点两种状态,选或不选.... 1.可过20% 2.可过70% 正解:折半搜索(meet in the middle) 有点像以前的双向广搜,原理其实是很像的,为了省略很多状态的枚举. 如果暴搜的话应该是O(2^n),n<=40,而折半搜的话,理论复杂度是O(2^(n/2)),看到一张图很好地诠释了优化复杂度&&空间的原理 (此为暴搜) (感谢顾哥NET这位大佬的图) 于是,分两次dfs,把答案记录在两个数组里. 问题在于…
[CEOI2015 Day2]世界冰球锦标赛 题目描述 译自 CEOI2015 Day2 T1「Ice Hockey World Championship」 今年的世界冰球锦标赛在捷克举行.\(Bobek\) 已经抵达布拉格,他不是任何团队的粉丝,也没有时间观念.他只是单纯的想去看几场比赛.如果他有足够的钱,他会去看所有的比赛.不幸的是,他的财产十分有限,他决定把所有财产都用来买门票. 给出 \(Bobek\) 的预算和每场比赛的票价,试求:如果总票价不超过预算,他有多少种观赛方案.如果存在以其…
题解 P4799 [[CEOI2015 Day2]世界冰球锦标赛] 双向搜索好题 传送门 实际上,双向搜索就是把\(a^n\)的复杂度转变成了大多为\(O(nlogna^{\frac{n}{2}})\)的复杂度. 上代码 #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #include<queue> #include<bitset> #…
题目描述 [CEOI2015 Day2]世界冰球锦标赛译自 CEOI2015 Day2 T1「Ice Hockey World Championship」 今年的世界冰球锦标赛在捷克举行.Bobek 已经抵达布拉格,他不是任何团队的粉丝,也没有时间观念.他只是单纯的想去看几场比赛.如果他有足够的钱,他会去看所有的比赛.不幸的是,他的财产十分有限,他决定把所有财产都用来买门票. 给出 Bobek 的预算和每场比赛的票价,试求:如果总票价不超过预算,他有多少种观赛方案.如果存在以其中一种方案观看某场…
Description 今年的世界冰球锦标赛在捷克举行.Bobek 已经抵达布拉格,他不是任何团队的粉丝,也没有时间观念.他只是单纯的想去看几场比赛.如果他有足够的钱,他会去看所有的比赛.不幸的是,他的财产十分有限,他决定把所有财产都用来买门票. 给出 Bobek 的预算和每场比赛的票价,试求:如果总票价不超过预算,他有多少种观赛方案.如果存在以其中一种方案观看某场比赛而另一种方案不观看,则认为这两种方案不同. Input 第一行,两个正整数 \(N\) 和 \(M\)\((1 \leq N \…
传送门 Solution 折半搜索裸题,注意\(long long\) Code #include <cmath> #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #define Re register #define Fo(i,a,b) for(Re int i=(a),_=(b);i&l…
正解:折半搜索 解题报告: 先放个传送门QAQ 想先说下部分分?因为包含了搜索背包两个方面就觉得顺便复习下?QwQ 第一档部分分 爆搜 就最最普通的爆搜鸭,dfs(第几场,钱),然后每次可以看可以不看于是dfs(+1,+钱)和dfs(+1,不变)地转移就好辣! 第二档部分分 背包 f[第几场][钱]地转移就好辣,不想多说了QwQ 然后你就能拿到70pts辣! 然后就说下,正解 正解就是,折半搜索鸭,就先处理出来前n/2场的所有花钱的方案,再处理出后n/2场的方案(就用第一档分的爆搜处理 然后up…
抄的题解 以及参考:https://www.cnblogs.com/ZAGER/p/9827160.html 2^40爆搜过不了,考虑折半搜索,难点在于合并左右的答案,因为有可能答案同时载左右两边,我们用两个数组记录下来答案, 然后我们再对左边的答案排个序,那么对于右边其中的来说,它可能产生的集合是与左边的状态相结合.使用二分查找 输入要用%lld #include<iostream> #include<algorithm> #include<cstdio> #incl…