
2.aoapc2ch8 例题
文章平均质量分 56
秦始皇吃花椒
这个作者很懒,什么都没留下…
展开
-
【题集总览】题集2:Aoapc2 ch8 高效算法设计 例题
题集内容 贪心思想与竞赛常用算法设计方法 习题 [ ] UVa120 煎饼 [ ] UVa1605 UN大楼 [ ] UVa1152 和为0的4个值 [ ] UVa11134 传说中的车 [ ] UVa11054 Gergovia的酒交易 [ ] UVa1606 两亲性分子 [ ] UVa11572 唯一雪花 [ ] 滑动窗口最小值问题(单调队列) [ ] UVa1471 防线 ** [ ...原创 2018-05-21 00:54:30 · 163 阅读 · 0 评论 -
[二分查找] UVa1607 Gates 与非门电路 (推理)
题目 思路 1._对于输入不同的x,电路最后的输出无非只有4种情况,常数0,常数1,x,非x。 常数时,直接判断x=0,x=1输出是否相同。相同的话,x对电路无影响,直接输出全0或全1即可。 与x有关时,即当x取0时,电路是一种结果。x取1时,电路是另一种结果。 2._**通过x=0和x=1输出不同**,判定x所在位置。 设x=0时输出0,x=1时输出1 0 0 0 0 -&g...原创 2018-06-08 15:19:24 · 396 阅读 · 0 评论 -
[滑动窗口] UVa12174 Shuffle的播放记录(滑窗做预处理)(较复杂区间处理)
车上想细节,这种细节一大堆的题让人很烦躁 #include <cstdio> #include <cstdlib> #include <algorithm> using namespace std; const int maxn = 100000 + 1000; int s, n, x[maxn*3], cnt[maxn],原创 2018-06-08 11:42:59 · 344 阅读 · 0 评论 -
[直接构造法] UVa1609 Foul Play 不公平竞赛 (复杂推理 + 递归)(难题理解不能)
题目 思路 代码 #include <cstdio> #include <cstdlib> #include <vector> using namespace std; const int maxn = 1024 + 10; char table[maxn][maxn]; int main(){ int n; while...原创 2018-06-08 10:49:37 · 608 阅读 · 4 评论 -
[分治] UVa1608 Non-boring sequences 不无聊序列 (分治与中途相遇法的结合)
题目 思路 1.主要思路:如果有一个只出现一次的元素A[p],那么所有包含此元素的所有连续子序列都满足不无聊。那么只需分治判断A[0~p-1]和A[p+1~n]是否不无聊即可。 2.分治方向的选择:(上界分析) 从左往右找:最坏情况是唯一元素恰好在最右边。T(n)=T(n−1)+O(n)=O(n2)T(n)=T(n−1)+O(n)=O(n2)T(n) = T(n-1)+O(n) = ...原创 2018-06-08 09:08:05 · 513 阅读 · 0 评论 -
[扫描法] UVa1442 Cave 洞穴
题目 思路 这道题的思路总体是扫描,但颇有一番推理的感觉,需要好好理解。 1.根据物理定律,每一段的水位高度h应满足 不会高于当前天花板 不会低于当前地板 向左向右的射线,均不会碰到天花板。(因为水是平的) 2.因此需要求每个h,h满足向左向右延伸都不会碰到天花板的最大值。 3.扫描法。对于每个地方,先求出向左延伸不会碰到天花板的高度h1,再求出向右延伸不会碰到天花板的...原创 2018-06-07 23:34:45 · 256 阅读 · 0 评论 -
[数据结构] UVa1471 Defense Lines 防线
题目 思路 1.需明确,在删除之后,最长连续递增子序列一定会存在在删除后两端连接处。下文用L代表最长连续递增子序列。 算法1:枚举起点j,终点i,再计算两点之间的L。O(n3)O(n3)O(n^3) 算法2:预先打表g(i),f(i),分别代表以i结尾和开头的最长L,再枚举i和j,可以用O(1)O(1)O(1)时间算出L。O(n2)O(n2)O(n^2) 算法3:只枚举终点i...原创 2018-06-07 16:47:36 · 340 阅读 · 0 评论 -
[二分查找] UVa714 Copying Books 抄书 (优化问题转判定问题+二分)(最大值最小问题)
题目 按顺序给你N个数,将这N个数分成连续的M段,使得这M段每段的和中的最大值最小,输出最小值(1<=N<=100000,1<=M<=N,每个数在1到10000之间),如果有多种可能的话,尽量在前面进行划分。 思路 1.最大值最小:好像是一种很常见的优化目标。。。我看人家别人blog都把这道题加上这个了,我也加上好了。 2.优化问题 转 判定问题+二分:(二分运...原创 2018-06-06 15:55:00 · 526 阅读 · 0 评论 -
[动态规划] UVa116 单向TSP (多阶段决策问题)
题目 思路 多阶段图的最短路 1.本题中,每一列就是一个阶段,每个阶段都有3种决策:直行,右下和坐上。 2.状态定义:(i,j),出于第j列第i行。 3.指标函数:d(i,j),从格子(i,j)出发到最后一列的最短边权路。(最短边权路,是将格子数字大小作为边的权,即数字之和最小的路) 4.状态转移方程: d(i,j)&nbsp;=&nbsp;min\{d(i+1,j+1),&nb...原创 2018-06-20 23:10:04 · 283 阅读 · 0 评论 -
[直接构造解] UVa120 Stacks of Flapjacks 煎饼
题目 (侵删) 给定一叠煎饼,你要写一个程序计算出如何才能使这叠煎饼自底向上由大至小的排列。给定煎饼的半径作为其尺寸,一叠煎饼的大小各不相同。 为煎饼叠排序是通过一些列的“翻转”动作来完成的。一个翻转动作就是将一个小铲插到煎饼叠中的某两个煎饼之间,然后将小铲上面的所有煎饼翻转(倒转小铲上面的子栈)。每个翻转动作由其开始的位置给出,即小铲上面子栈中最底下一个煎饼的编号。整叠煎饼中最下面一个的位...原创 2018-06-05 01:17:37 · 207 阅读 · 1 评论 -
[贪心] UVa11134 Fabled Rooks 传说中的车 (问题分解思想运用的典例)
题目 在一个n*n(1<=n<=5000)的棋盘上放置n个车,每个车都只能在给定的一个矩形里放置,使其n个车两两不在同一行和同一列,判断并给出解决方案。 思路 1.问题分解:由于本题中,一个车的x坐标和y坐标没有关系,所以可以分解处理。所以问题分解的基本方法就是:将问题分解成独立的不相关的小问题进行解决。本题O(n2)O(n2)O(n^2) -> O(n)O(n)O(n...原创 2018-06-05 00:44:04 · 232 阅读 · 0 评论 -
[单调队列] POJ2823 Sliding Window (滑动窗口的最值问题)
题目 An array of size n ≤ 10 6 is given to you. There is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Eac...原创 2018-06-04 23:36:26 · 298 阅读 · 0 评论 -
[递归式推导] UVa12627 Erratic Expansion 奇怪的气球膨胀
题目 一开始有一个红气球,每小时,一个红气球会变成3个红气球和1个蓝气球,而一个蓝气球会变成4个蓝气球,如图所示,经三小时变化后。根据图中给出的气球的分裂方式,求第K次分裂后,第A行到第B行的红色气球的数量。 代码 #include <cstdio> #include <cstdlib> #include <cmath> #define ll ...原创 2018-05-24 01:13:23 · 230 阅读 · 0 评论 -
[模拟] UVa11093 Just Finish it up 环形跑道 (模拟之剪枝)
题目 环形跑道给定n个加油站(n<=100000),编号从1到n,输入Pi表示第i个加油站可以加油Pi加仑,Qi表示第i到第i + 1个加油站消耗油量。初始油箱为空,求选择一个起点,使得可以走完一圈回到起点。如果无解输出Not possible,否则输出可以选择的最小起点。 代码 #include <cstdio> #include <cstdlib> #i...原创 2018-05-24 00:41:58 · 261 阅读 · 0 评论 -
[Huffman] UVa10954 Add All 全部相加 (优先队列使用 && Huffman编码树思想应用)
题目 有n个数的集合S,每次可以从S中删除两个数,然后把它们的和放回集合,直到剩下一个数。每次操作的开销等于剩下的两个数之和,求解最小的总开销。 代码 #include <cstdio> #include <cstdlib> #include <cstring> #include <functional> #include <queu...原创 2018-05-23 23:34:11 · 165 阅读 · 0 评论 -
[扫描法] UVa1606 Amphiphilic Carbon Molecules 两性亲分子 (极角排序+向量叉积)
题目 平面上有 n 个点,每个点不是黑的就是白的,现在要放一个隔板,把它们分成两部分,使得一侧的白点数加上另一侧的黑点数最多。 uva1606 代码 #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <algorit...原创 2018-05-23 00:42:32 · 245 阅读 · 0 评论 -
[等价转换] UVa11054 Wine trading in Gergovia Gergovia的酒交易
#include &lt;cstdio&gt; #include &lt;cstdlib&gt; #include &lt;cmath&gt; int main(){ int n; while(scanf("%d",&amp;n) == 1 &amp;&amp; n){ long long ans原创 2018-05-17 16:47:49 · 206 阅读 · 0 评论 -
[贪心] UVa1605 Building for UN 联合国大楼 (贪心之直接构造解)
#include "stdafx.h" #include &lt;cstdio&gt; #include &lt;cstdlib&gt; int main() { freopen("output.txt", "w", stdout); int n; while (scanf("%d&qu原创 2018-05-16 23:24:20 · 263 阅读 · 0 评论 -
[数形结合] UVa1451 Averange 平均值 (前缀和+斜率优化)(单调栈)
题目 思路 代码 #include <cstdio> #include <cstdlib> const int maxn = 100000 + 1000; int num[maxn], sum[maxn], n, L, p[maxn]; char s[maxn]; // 有效避免除法 int cmp(int x1, int x2, int ...原创 2018-06-09 00:57:53 · 974 阅读 · 0 评论