回溯
Ziiyan
这个作者很懒,什么都没留下…
展开
-
UVA - 140 Bandwidth
题目大意:给出字母间的连接关系,找到一个排列,使得字母间距离的最大值最小,如果有多个解输出字典序最小的。解题思路:先排序一下保证答案相同时是字典序小的先,用 next_permutation 枚举所有排列。对于每个排列,我们找到两个有连接关系的字母距离最大的值,比较一下之前的最大值,储存较小的是答案。不难,主要是输入比较复杂,仔细一点就可以了。#include<iostream> #include原创 2016-08-29 22:25:36 · 400 阅读 · 0 评论 -
UVA - 167 The Sultan's Successors
题目大意:八皇后,即横竖和两条对角线上不能同时摆放,不同的是在每个格子上有值,求八个格子的和最大是多少,输出宽度 5。解题思路:多一个 tmp 去计算值的和即可。#include<iostream> #include<cstdio>#include<cmath>#include<string.h>#include<stdlib.h>#include<algorithm>using nam原创 2016-08-23 22:38:14 · 227 阅读 · 0 评论 -
UVA - 10012 How Big Is It?
题目大意:给出圆的半径,然后紧贴底部放在盒子里,不能相交,问最短长度。解题思路:用 next_permutation 枚举圆的摆放顺序,然后对每种顺序都进行摆放。tmp 表示当前长度,temp[] 用来储存每个圆的圆心的位置,下一个圆心位置:对之前每一个圆都假设相切计算一次位置,取所有当中最大的。#include<iostream> #include<cstdio>#include<cmath>原创 2016-08-23 22:37:56 · 208 阅读 · 0 评论 -
UVA - 331 Mapping the Swaps
题目大意:给一个整数数列排序,只能交换相邻数字,问交换次数最少的方法有几种。解题思路:因为只允许交换相邻数字,冒泡就是交换次数最少的方法,保证不要进行无意义的交换,然后每完成一次排序次数 +1 即可。#include<iostream> #include<cstdio>#include<cmath>#include<string>#include<stdlib.h>#include<alg原创 2016-08-22 20:33:41 · 191 阅读 · 0 评论 -
UVA - 10344 23 out of 5
题目大意:五个数字三种符号(+,-,×)任意组合是否能够得到 23。解题思路:就是各种暴力枚举…#include<iostream> #include<cstdio>#include<cmath>#include<string>#include<stdlib.h>#include<algorithm>using namespace std;int num[5];int vis[5];原创 2016-08-22 20:33:20 · 188 阅读 · 0 评论 -
UVA - 301 Transportation
题目大意:一辆列车限载 n 个人,共有 s 站,t 个订单,往下 t 行表示 t 个订单,每行三个数字分别是起始站,终点站,人数。对于每个订单可以选择载或不载(不能只载一部分人),然后每人每站一块,问最大利润。解题思路:用一个 peo 数组来储存每站的人数,当大于限定人数时该订单不可取。#include<iostream> #include<cstdio>#include<cmath>#inc原创 2016-08-22 20:33:02 · 204 阅读 · 0 评论 -
UVA - 539 The Settlers of Catan
题目大意:n 个点 m 条线,每条线只能经过一次,点不做要求,问最多能经过几条线。解题思路:无向图,处理的时候两个方向都要标记,起点任意,所以循环一下每个点都做一次起点。然后就是回溯了。#include<iostream> #include<cstdio>#include<cmath>#include<string.h>#include<stdlib.h>#include<algorith原创 2016-08-20 23:37:36 · 185 阅读 · 0 评论 -
UVA - 639 Don't Get Rooked
题目大意:类似于八皇后。每行每列只能放一个位置,若有墙隔着就互不影响,问最多能放几个。解题思路:回溯,先读入地图,ok() 分上下左右四个方向判断当前位置是否可以放置,ans 保存最佳答案。tmp 是当前放了多少个。遍历地图,若当前位置可放就标记一下,个数 ++,递归后还原状态。#include<iostream> #include<cstdio>#include<cmath>#include原创 2016-08-20 23:37:09 · 212 阅读 · 0 评论 -
UVA - 216 Getting in Line
题目大意:有几台电脑,要用网线连在一起,每根线接到地面还要外加 16,求最短线长。解题思路:暴力枚举各种连接方式,ans,as[] 储存最佳答案。#include<iostream> #include<cstdio>#include<cmath>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace s原创 2016-08-19 22:21:28 · 181 阅读 · 0 评论 -
UVA - 208 Firetruck
题目大意:给出一张图,求从 1 到 n 的所有路径。解题思路:回溯 + 剪枝。map[][] 存图,arv[i][j]表示 i 点是否能够到达 j 点,这就是剪枝条件,对于每个点要判断是否能够到达 n 点,如果不能到就不要再查找了否则会 TLE。然后就是回溯。arv 忘记初始化 TLE 了好几次。。。#include<iostream> #include<cstdio>#include<cmat原创 2016-08-29 22:28:10 · 303 阅读 · 0 评论 -
UVA - 193 Graph Coloring
题目大意:涂色,相邻(有连接)的点不能都上色,求最多能涂多色个点,输出个数和编号。解题思路:dfs 从一号点开始判断,与当前点连接的点是否有涂色,如果都没有,就给当前点涂色(回溯当前点不涂色),直到判断完所有的点,统计一下上色的点的个数,存下较多的情况。#include<iostream> #include<cstdio>#include<cmath>#include<string.h>#i原创 2016-08-29 22:27:29 · 324 阅读 · 0 评论 -
UVA - 165 Stamps
题目大意:可以贴 h 张,有 k 种不同的面额,问如何选择面额能使贴出来的值最大(要求这些值连续)。 如 h=3,k=2 表示可以贴三张,有两种面额。如果这两种面额是 1,4,那么我们可以得到 1,2,3,4,5,6(8,9,12),但是 8 和之前已经不连续了所以最大是6。 如果这两种面额是 1,3,那么我们可以得到 1 到 7 及 9,同样 9 不连续了最大 7。 比较这两种情况我们选择面原创 2016-08-23 22:38:38 · 252 阅读 · 0 评论