算法竞赛入门经典第二版第七章例题+习题
樂_smile
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
UVa 10384 推门游戏(The Wall Pusher)
哈哈哈哈哈哈哈哈哈哈哈哈哈哈我终于AC啦!俺减了两次枝#include<bits/stdc++.h>#define LL long long#define ms(s) memset(s, 0, sizeof(s))#define INF 0x7fffffffusing namespace std;// 4 * 6const int r = 4;const int c...原创 2019-10-20 18:46:51 · 190 阅读 · 0 评论 -
UVa 12569 在树上放置移动机器人(Planning mobile robot on Tree (EASY Version))
这题太简单了,我都不想说了。你们自己看吧。#include<bits/stdc++.h>#define LL long longusing namespace std;const int maxn = 15;int n, m, s, t;int state = 0;bool vis[32768][maxn];bool G[maxn][maxn];struct No...原创 2019-09-29 20:54:23 · 251 阅读 · 0 评论 -
UVa 11241 守卫棋盘(Guarding the chessborad)
代码:IDA* 搜索与回溯#include<bits/stdc++.h>#define LL long longusing namespace std;const int maxn = 11;int n, m;bool exi[maxn][maxn];bool vis[4][maxn * 2];bool occupy[maxn][maxn];bool check(...原创 2019-09-28 22:14:55 · 229 阅读 · 0 评论 -
UVa 12107 数字谜(Digit Puzzle)
注释写的很清楚了加深迭代搜索双重搜索超级暴力。。#include<bits/stdc++.h>#define LL long longusing namespace std;string s[3];char ch[] = "*0123456789";int len[3];bool cal() { // 核对 int num1, num2, num3; num...原创 2019-09-27 00:34:31 · 404 阅读 · 0 评论 -
UVa 12558 埃及分数(Egyptian Fractions (HARD version) )
题目:相比于埃及分数,多了一个某些数字不能出现的。说困难,实际上只要判断一下某个数是否可以用而已。#include<bits/stdc++.h>#define LL long longusing namespace std;const int maxn = 1e3 + 10;unordered_set<LL> s;LL arr[maxn];LL ans[...原创 2019-09-26 12:06:19 · 254 阅读 · 0 评论 -
UVa 12113 重叠的正方形(Overlapping Squares)
题目:给定一个4*4的棋盘和棋盘上所呈现出来的纸张边缘,问能否用不超过6张纸,搞出这种情况。要点:无, 测试数据很水,不用担心超时在我自己的电脑上运行肯定超过3s了,那些测试样例。。但是110ms过了代码有点长,但是非常好理解,都注释了。#include<bits/stdc++.h>#define LL long longusing namespace std;in...原创 2019-09-23 14:28:03 · 321 阅读 · 0 评论 -
UVa 690 流水线调度(Pipeline Scheduling)
题目:略代码:#include<bits/stdc++.h>#define LL long longusing namespace std;const int maxn = 200 + 10;const int maxr = 5;int maze[maxr][maxn];int x[maxn], y[maxn];int n;char str[maxn];int...原创 2019-09-22 20:51:41 · 318 阅读 · 0 评论 -
UVa 818 切断圆环链(Cutting Chains)
题目: 有n个圆环,其中有一些已经扣在一起了,现在需要打开尽量少的圆环,使得所有的圆环可以组成一条链(当然,所有打开的圆环最后都要再次闭合)。例如,有5个圆环,1-2,2-3,4-5 则需要打开一个圆环4,这样用它穿过3和5 这样就连成1-2-3-4-5要点;首先得搞明白这个圆环是如何插的,可以想象一下,把4这个圆环从 4-5这个链接中断开后, 4 和 5都是独立的圆环,而一个圆环在插入的...原创 2019-09-21 14:14:08 · 594 阅读 · 1 评论 -
UVa 211 多米诺效应(The Domino Effect)
题目: 有一副多米诺骨牌,包含28张,每个多米诺骨牌正反面各有一个数字。在7 * 8的网格中各张牌各摆一张,左边是个格子的典树,右边是格子所属的骨牌序号,要求输出所有可能的骨牌序号。搜索与回溯,注意往右和下搜索,当搜索到最右侧的时候,跳回最左侧。这样才可以遍历所有的节点。#include<bits/stdc++.h>#define LL long longusing nam...原创 2019-09-20 17:32:08 · 414 阅读 · 0 评论 -
UVa 225 黄金图形(Golygons)
题目:原创 2019-09-19 19:48:38 · 260 阅读 · 0 评论 -
UVa 1603 破坏正方形 (Square Destroyer)
题目:略#include<bits/stdc++.h>#define LL long longusing namespace std;const int maxs = 60; // 25 + 16 + 9 + 4 + 1 = 55;const int maxm = 60; // 2 * 5 * (5 + 1) = 60;int n, m;int best;int ...原创 2019-09-11 20:34:07 · 333 阅读 · 0 评论 -
UVa 1602 网格动物(Lattice Animals)
代码参考刘汝佳的,因为有算法所以贴上来Polyomino#include<bits/stdc++.h>using namespace std;struct Cell { int x, y; Cell(int x = 0, int y = 0):x(x), y(y) {}; friend bool operator < (const Cell&am...原创 2019-09-11 20:23:49 · 463 阅读 · 0 评论 -
UVa 208 消防车(Firetruck)
题目:输入一个n个结点的无向图以及某个节点k,按照字典序从小到大顺序输出从节点1到节点k的所有路径,要求节点不能重复经过。事先判断是否可以到达节点k否则会超时。分析:并查集判环搜索与回溯#include<bits/stdc++.h>#define LL long longusing namespace std;const int maxn = 20 + 5;int...原创 2019-09-10 21:33:49 · 359 阅读 · 0 评论 -
UVa 1374 快速幂计算(Power Calculus)
题目:输入正整数,问最少需要几次乘除法可以从x得到x^n 每次x的次方只能从已有的x的次方中取,每次算出来的x的次方都进入已有的x的次方,一开始给一个x的一次方。问最小步数。分析:IDA*如果当前的 2 ^ (maxd - 当前深度) < n 就剪枝条。#include<bits/stdc++.h>#define LL long longusing namespac...原创 2019-09-10 00:19:42 · 564 阅读 · 0 评论 -
UVa 1343 旋转游戏(The Rotation Game)
题目:往八个方向旋转棋盘,要求中间的八个相同,求最小步数,以及如何移动。分析:IDA*启发函数 深度 + 不相同个数 > maxd 就退出。#include<bits/stdc++.h>#define LL long longusing namespace std;/* 00 01 02 0304 05 06 07 08...原创 2019-09-10 00:08:37 · 285 阅读 · 0 评论 -
UVa 11212 编辑书稿(Editing a Book)
题目:你有一篇由n个自然段组成的文章,希望将他们排列成1,2,3 ……, n 可以用剪切和粘贴键完成任务,每次可以剪切一个连续的自然段,粘贴时按照顺序粘贴。注意剪切板只有一个,所以不能连续剪切。要点:看刘汝佳的,没什么想说的,自己用刘汝佳的思路实现了一遍。主要是启发函数 以及 搜索与回溯。IDA*#include<bits/stdc++.h>#define LL l...原创 2019-09-07 16:12:06 · 230 阅读 · 0 评论 -
UVa 1601 万圣节后的早晨(The morning after Halloween)
题目:w*h 网格上有n (n<=3) 个小写字母,要求把他们分别移动到对应的大写字母里。每步可以有多个鬼同时移动(往上下左右移动,也可以不动,移动是独立的),每步结束后两个鬼不能占用同一个位置,也不能在一步之内交换位置。要点:建立新的有向图下面给出两种做法,在UVA上分别以 1000ms 和 750ms 左右通过, 双向bfs快了不多。bfs:#include<bit...原创 2019-09-04 19:23:03 · 437 阅读 · 0 评论 -
UVa 1354 天平难题(Mobile Computing)
题目比较长,需要题目的参照其他文章。看了很多解法,觉得都不是很容易看懂。尤其是刘汝佳自身的版本。下面写一种易懂的版本首先直接看这幅图。实际上就是枚举二叉树,每次任选两个节点,然后当成一个新的结点,并且这个节点的质量就是任选的两个节点质量之和。这样一直反复枚举下去,就可以得到最后节点的头。这里的二叉树是自底向上形成的。然后每个头节点的最左值显然等于左边的值 + 左边节点已经有的左...原创 2019-09-03 20:40:32 · 253 阅读 · 0 评论 -
UVa 10603 倒水问题 (Fill)
设3个杯子的容量分别为a,b,c 最初只有第三个杯子装满了c升水,其他两个杯子为空。最少需要倒多少升水才能让某一个杯子中的水有d升,如果不行的话,尽量让某一个杯子的水接近d升。由于水总量一定,两个杯子的水可以确定三个杯子的水。由于每个杯子都可能接近d升,因此应该用一个数组来判断。题目要求总共倒的水最少,用一个变量记录。用优先队列广搜即可。#include<bits/stdc++.h...原创 2019-09-02 21:12:43 · 355 阅读 · 0 评论 -
UVa 140 带宽(Bandwidth)
给出一个最多为8个节点的图,定义节点i的带宽为i和相邻节点在将要输出排列中的最大距离,而所有节点的最大距离的最大值为这个图的带宽面求一个最少带宽的节点的排列,如果多个,输出字典序最小的排列。搜索与回溯。剪枝,否则可能超时。代码易懂但有点长。#include<bits/stdc++.h>#define LL long long#define INF 0x7fffffffus...原创 2019-09-01 17:58:09 · 348 阅读 · 0 评论 -
UVa 129 困难的串(Krypton Factor)
如果一个字符串包含两个相邻的重复字串,则称他为 容易的串,其他串,称为困难的串典型的,例如 BB,ABCDACABCAB 都是容易的串相反的,例如 B CBABCBA 都是困难的串输入正整数n和L 输入由前L个字符组成的, 前L个字符指在A - Z 中的前L个字符,L不会超过26, 字典序第n的困难的串,其实按递归顺序来,第n个就是字典序第n的困难的串样例输入7 330 3样例输出...原创 2019-09-01 17:16:01 · 221 阅读 · 0 评论 -
UVa 524 素数环(Prime Ring Problem)
输入正整数n, 把整数1,2,3,……,n组成一个环,使得相邻两个整数之和均为素数。输出时从1开始逆时针排列,同一个环应该只输出一个。样例输入:6样例输出:1 4 3 2 5 61 6 5 2 3 4因为输入的n不超过16 因此素数的大小应该不会超过 16 + 15 = 31设置一个素数数组,避免屡次判断超时。设置一个vis数组,因为素数环每个数字只出现一次,因此用一个 vis数组...原创 2019-09-01 17:09:38 · 314 阅读 · 0 评论 -
UVa 11694 Gokigen Naname 谜题(Gokigen Naname)
题目:略其实不是很好意思发上来,因为代码有很多借鉴,算是为了完成一个章节吧。#include<bits/stdc++.h>#define LL long long#define ms(s) memset(s, 0, sizeof(s))using namespace std;const int maxn = 10;int n;char pic[maxn][maxn];...原创 2019-10-20 14:36:44 · 373 阅读 · 0 评论 -
UVa 11846 找座位(Finding Seats Again)
题目:略#include<bits/stdc++.h>#define LL long longusing namespace std;const int maxn = 20 + 5;int n;int k;char pic[maxn][maxn];char ans[maxn][maxn];bool dfs(int id, char ch) { while(...原创 2019-10-18 19:06:22 · 356 阅读 · 0 评论 -
UVa 11882 最大的数(Biggest Number)
题目链接:https://vjudge.net/problem/UVA-11882大意是:搜索一下,连起来成为一个数字,不能反复走过一个格子,求最大的数字思路:本题搜索的话,会超时,需要剪枝,搜索剩余可能步数,可以用bfs,基本在O(1)的时间就可以知道剩下几步可以走#include<bits/stdc++.h>#define LL long longusing names...原创 2019-10-17 22:15:10 · 415 阅读 · 0 评论 -
UVa 307 小木棍(Sticks)
题目:略思路:1 木棍原来最小长度应该是当前所有木棍中最长木棍到木棍总和的一个范围内2 剪枝很重要,题目没有指定明确数据范围,下列几个剪枝,去掉一个都TLE算法解释:排序木棍,为了更加快速的求解也为了 下列代码中/****/注释这行的剪枝,非常重要假设 九个木棒的长度为 5 2 1 5 2 1 5 2 1如果没有排序 最后取的结果可能是 2 + 2 + 1 + 1 = 6 这样的...原创 2019-10-17 19:27:12 · 337 阅读 · 0 评论 -
UVa 817 数字表达式 (According to Bartjens)
题目:略这一题做了两遍才做出来有一些麻烦的点需要注意1: 数字表达式的计算,这里由于只涉及到 ±* 因此其实没必要用中缀表达式转后缀表达式利用栈来计算,处理起来并不方便2: 2000= 由于没有插入任何的运算符,所以其实也为 IMPOSSIBLE除此之外,这是一道dfs暴力深搜的水题,甚至没有地方需要剪枝,代码非常简单,原创。#include<bits/stdc++.h>...原创 2019-10-16 22:52:15 · 326 阅读 · 0 评论
分享