
uva
文章平均质量分 79
fffalling
这个作者很懒,什么都没留下…
展开
-
uva11809 紫书第三章习题
题目链接:https://cn.vjudge.net/problem/UVA-11809 思路:这个如果直接去算的话相当麻烦,当E很大的时候数会直接超出上限。这个时候可以反过来想,最大的时候M和E的每一位肯定都是1,并且又有0 ≤ M ≤ 9且1 ≤ E ≤ 30的限定,所以一共只有300种情况,自然就想到了打表,先用二重循环枚举M和E可能出现位数的所有情况打一张表,然后输入的时候倒回去找即可。原创 2017-10-17 22:57:04 · 412 阅读 · 0 评论 -
Mobile Computing UVA 1354(枚举二叉树)
有s块石头,每块都被一根绳子吊着,如果有两个及以上的石头,需要平衡的天平把所有的石头挂起来。房间的宽度为r,问小于房间宽度r的天平的最大宽度。一道题卡了好几天… 解析: 这道题用到的是枚举二叉树,从上往下枚举是无从下手的,所以我们要每次枚举两个节点(包含新生成的父节点),去组成父节点,用lw纪录这个节点左边的长度,注意:包含子节点左边的长度才有效.同样用rw纪录这个节点右边的长度.然后...原创 2018-04-08 21:05:37 · 189 阅读 · 0 评论 -
UVa 10603 Fill (BFS+优先队列)
题意:给定4个数,a,b,c,d,分别代表空杯子容积为a,b,一个盛满水的杯子容积为c,让你不断倒水,找一个dd,是不是存在某个时刻,某个杯子里的水dd,和d相同,或者无限接近。让求最少的倒水量和dd(可能和d相同)。 解析:用bfs枚举所有的状态,就是把i里面的水倒到j里面,在这里学到了用node的优先队列,内部书写也是要记一记.其他代码里面会有注释.#include<bits/...原创 2018-04-08 22:52:30 · 182 阅读 · 0 评论 -
UVA 1601 The Morning after Halloween (bfs好题)
题目链接题意:最多三个字母,要让他们移动到对应的大写字母的方格里,问最小的步数(一步里面三个字母可以同时走) 解析:直接bfs做的话肯定会超时,因为每一步都是五的三次方,而且障碍物很多,所以我们需要建图,听起来挺可怕的,其实不然,建图就是我们将图中可以走的节点进行标号,然后每个节点i可以到达的节点j记录到对应的二维数组G[i][deg[i]++]]中,这样就建好图了,这样做本来两个坐标表示的...原创 2018-04-11 18:19:54 · 236 阅读 · 0 评论 -
UVA 11212 Editing a Book (dfs+剪枝)
题目链接题意:你有一篇n个自然段组成的文章,希望将它们排列成1,2,…,n。可以用Ctrl+X(剪切)和Ctrl+V(粘贴)快捷键来完成任务。每次可以剪切一段连续的自然段,粘贴时按照顺序粘贴。注意,剪贴板只有一个,所以不能连续剪切两次,只能剪切和粘贴交替。例如,为了将{2,4,1,5,3,6}变为升序,可以剪切1将其放到2前,然后剪切3将其放到4前。再如,排列{3,4,5,1,2},只需一次剪...原创 2018-04-12 21:27:20 · 173 阅读 · 0 评论 -
UVA 12325 Zombie's Treasure Chest(替换思维题)
题目链接 题意:你有一个体积为N的箱子和两种数量无限的宝物。宝物1的体积为s1,价值为v1,宝物2的体积为s2,价值为v2.输入均为32位带符号整数。你的任务是计算最多能装多大价值的宝物,例如:n=100,s1=v1=34,s2=5,v2=3,那么答案就为86,方法是装2个宝物1,装6个宝物2,。每种宝物都必须是拿非负整数个。 解析:按照紫书上思路来就好: 最容易想到的是枚举法。枚举宝物1的...原创 2018-04-12 23:00:16 · 122 阅读 · 0 评论 -
UVA 1025 A Spy in the Metro(dp)
解析: 在每个车站有三种决策 1.等一分钟 2.坐上向右的火车(如果有的话) 3.坐上向左的火车(如果有的话) 所以我们预处理出火车在每个车站停靠的时刻. dp[i][j]表示在i车站,时刻j最少还需等待多长时间. 临界状态为dp[n][tt]=0. 按照三种决策做出转移方程即可 判断不可能的条件就是dp[1][0]为初始值#include <bits/stdc++.h...原创 2018-05-03 17:24:14 · 116 阅读 · 0 评论 -
The Tower of Babylon UVA 437(DAG最长路)
题目链接 题目大意 有n种长宽高为x,y,z的砖头,每种都有无数个。 砖头可以用不同姿势来盖。 砖头a以某种姿势可以盖在砖头b上,当且仅当a的底部的长宽都要比b的底部长宽要小。 问最高可以建多高? 解析: DAG求最长路 每种砖头有无限个,每个砖头有三种姿势,所以可以看成三种底面,为了便于判断我们可以排下序 然后进行递归动态规划(这种动态规划比递推用起来更加形象且利于理解) d...原创 2018-05-03 20:33:44 · 217 阅读 · 0 评论 -
Tour UVA 1347 (双人dp)
题目链接 题意:n个点,坐标给出,设计一条路线,从最左边的点,走到最右边的点,再回来,除最左边的点和最右边的点外,每个点有且经过一次。求最短距离。 分析: (按紫书思路,自己想肯定想不到的0.0) 可以转换一下,两个人走不同的路线,从最左边的点走到最右边的点。然后d(i,j)表示第一个人在I,第二个人在j时,还需走多长的距离。但是,这样的定义是很难状态转移的. 所以修改一下,d(i,j)...原创 2018-05-03 21:09:04 · 99 阅读 · 0 评论 -
UVa 10003 - Cutting Sticks(区间dp)
题目:有一个长l的木头,切成n+1段,切割的代价是当前段长度,求最小代价和。分析:dp,区间动态规划。石子合并的逆过程。 状态:设F(i,j)为从点i切到j长度的木头切割成对应的小段代价,则有转移方程: F(i,j)= min(F(i,k)+F(k,j)+cost(i,j)) {其中 i < k < j }; 这里注意,dp过程按区间大小递增顺序进行。 说明:注意边界条...原创 2018-05-10 16:30:16 · 103 阅读 · 0 评论 -
Unidirectional TSP UVA 116(dp+路径记录)
题目链接 题意:给定一个n*m的矩阵,要求从第一列的任何一行出发,每次沿右或右下或右上到达后面一列,最后到第m列任何一行整个路程的最小值,并且要求是字典序最小的。解析:最小值是很好求的 用dp[i][j]表示从第i行第j列结束的最小值 然后往前递推 把上边界和下边界特化一下就好了. 关键在于路径的寻找,我们知道对于除了第一列之外的每一列的每个节点都必有一个前驱节点,所以当我们找到最小...原创 2018-05-04 13:14:06 · 126 阅读 · 0 评论 -
uva 1626 Brackets sequence(区间dp)
题意:定义满足1.空序列2.()(X)及括号和其括起来的合法序列3.【】要求和()相同都是合法的串。然后给定一段序列,求添加最小的()或【】使得序列合法。思路: 区间dp。以前做过用堆栈来判断合法性的题目,这道题目同样是经典。思想是不断分割小区间,当出现(X)时,应该转移到x,即从dp(i,j)转移到dp(i+1,j-1)如果多于两个字符应该枚举中间点转移到最小的状...原创 2018-05-17 16:10:37 · 176 阅读 · 0 评论 -
UVa 1331 最大面积最小的三角剖分(dp)
一共有4条边,我们可以以随意的顺序切割,不过如果这样的话,就会出现类似v0v3v4v6这样的多边形,这样的多边形很难用简洁的状态表示出来,这就是让我一开始很纠结的地方。其实我们会发现,对于同一种切割方法,我们可以有多种切割顺序,但我们只要计算一种就好了,不如把决策顺序规范化。例如还是上面第一张图,我们可以先切割出三角形v0v3v6,那么我们切割完之后可以把图分割成一个三角形和两个多边形...原创 2018-05-17 17:43:55 · 340 阅读 · 0 评论 -
Jin Ge Jin Qu hao UVA 12563(01背包)
题意: KTV里面有n首歌曲你可以选择,每首歌曲的时长都给出了. 对于每首歌曲,你最多只能唱1遍. 现在给你一个时间限制t (t<=10^9) , 问你在最多t-1秒的时间内可以唱多少首歌曲num , 且最长唱歌时间是多少time (time必须<=t-1) ? 最终输出num+1 和 time+678 即可. 注意: 你需要优先让歌曲数目最大的情况下,...原创 2018-05-04 21:49:40 · 168 阅读 · 0 评论 -
Lighting System Design UVA 11400 (dp+思维)
题目大意:有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要该灯的数量为L。注意到,电压相同的灯泡只需要共享一个对应的电源即可,还有电压低的灯泡可以被电压高的灯泡替代。为了节约成本,你将设计一种系统,使之最便宜。 分析:首先需要明确一种灯泡要么全部换,要么不换。如果换一部分的话,首先电源费用得不到节约,那么节约的部分就只来自于换的那部分灯泡,既然可以节约钱干嘛不干...原创 2018-05-04 22:42:55 · 173 阅读 · 0 评论 -
UVA 11584 - Partitioning by Palindromes(字符串dp)
题目链接题目大意: 给一个字符串, 要求把它分割成若干个子串,使得每个子串都是回文串。问最少可以分割成多少个。解析:f[i]表示以i结尾的串最少可以分割的串数。 当从j到i的字符串回文串时(判断回文串的效率为n/2) 状态转移方程为 f[i] = min{ f[j-1]+1, f[i] } 当j=0的时候令f[i]=1就好了#include <bits/stdc++...原创 2018-05-06 11:01:59 · 160 阅读 · 0 评论 -
Bandwidth UVA - 140(next_premutation)
读取的时候有坑,自己写怎样都过不去,参考别人的总算过了,最多8个,所以把这8个找到用函数全排列就好了. 不难,具体看代码把#include<bits/stdc++.h>#define ll long long#define inf 0x3f3f3f3f#define pb push_back#define rep(i,a,b) for(int i=a;i<b;i++...原创 2018-03-06 12:25:11 · 187 阅读 · 0 评论 -
Krypton Factor UVA 129(dfs)
题意:找由前L个字母组成的第n大的困难串(相邻子串都不相等). 解析:直接从小到大找字符串,若是困难串,则cnt+1,知道cnt=n时按照题中的格式输出(注意一下格式) 困难串的判断:每新加一个字母,我们只需要判断以这个字母为结尾的子串和其相邻的子串是否相等即可,因为前面的已经判断过了,代码中会有注释#include<bits/stdc++.h>#define ll long...原创 2018-03-05 17:45:52 · 198 阅读 · 0 评论 -
UVA - 1588 Kickdown(模拟)
A research laboratory of a world-leading automobile company has received an order to create a special transmission mechanism, which allows for incredibly efficient kickdown — an operation of switching to原创 2017-10-15 10:28:12 · 247 阅读 · 0 评论 -
UVA 232 字符串处理
个人感觉这是一道比较难ac的题,有很多细节需要处理,比如输出格式等 思路简单,这里给出代码:#include<bits/stdc++.h>using namespace std;int main(){ char buf[12][12]; int num[12][12]; int r,c; int p=1; //序号 while(scanf("%d",&r原创 2017-10-13 19:00:12 · 236 阅读 · 0 评论 -
Trees on the level UVA - 122
这道题设计到二叉树的层次遍历,直接开数组暴力去装肯定装不下,所以我们可以人为的按照输入顺序对每一个节点进行标号,然后用r[l]表示该节点的右子树,l[i]表示该节点的左子树,它们的值为-1时表示没有左子树或右子树.#include<bits/stdc++.h>#define ll long longusing namespace std;const int N=300;int r[N],l[原创 2017-11-17 18:59:08 · 220 阅读 · 0 评论 -
UVA - 699
题目链接典型的递归写法,注意下格式#include #define ll long long#define pb push_back#define inf 0x3f3f3f3fusing namespace std;const int N=1e5+100;const int mi=N/2;int arr[N];int l,r;void build(int p){原创 2018-01-23 21:57:13 · 294 阅读 · 0 评论 -
UVA 10129 Play on Words(并查集)
Some of the secret doors contain a very interesting word puzzle. The team of archaeologists has to solve it to open that doors. Because there is no other way to open the doors, the puzzle is very imp原创 2018-01-31 10:43:40 · 456 阅读 · 0 评论 -
UVA 816
紫书上的题,题目链接wa的我心疼,网上也有很多误解的地方标记初始状态为0的话,那么下次搜索到这个状态就return了,但是这个状态其实并没有出现过,我们默认初始为它的下一个点的坐标,方向不变,这才是第一个达到的状态才对。大致题意 有一个最多包含9*9个交叉点的迷宫。输入起点、离开起点时的朝向和终点,求一条最短路(多解时任意输出一个即可)。详细题意请看原题难点在于转向,将四个方向和原创 2018-01-26 16:09:59 · 387 阅读 · 0 评论 -
UVA 10305(拓扑排序)
简单的拓扑排序,记录一下模板吧#include #define ll long long#define pb push_back#define inf 0x3f3f3f3f#define rep(i,a,b) for(int i=a;i#define rep1(i,a,b) for(int i=a;i>=b;i--)using namespace std;const int原创 2018-01-26 17:26:45 · 195 阅读 · 0 评论 -
UVa1599 Ideal Path(双向bfs+队列判重)
紫书上的一道例题,题目链接做两次bfs,第一次记录可达n的点到n的距离,到点1为止 第二次 要在距离满足上一个点-1的基础上找边的最小值,这道题并不需要找到一条路径,只需要输出边的值即可,所以即便有多条边,也直接记录最小值就好了。 需要注意的一点,为了避免超时,需要加一个优化,用v数组来记录点是否被加入到队列中,即队列去重#include <bits/stdc++.h>#...原创 2018-02-09 02:04:41 · 287 阅读 · 0 评论 -
Undraw the Trees UVA 10562(递归写树)
这道题不难,直接做就好了,但是对边界的要求还是比较严格的,需要处理的细节比较多#include #define ll long long#define pb push_back#define inf 0x3f3f3f3f#define rep(i,a,b) for(int i=a;i#define rep1(i,a,b) for(int i=a;i>=b;i--)#define原创 2018-02-05 16:24:01 · 273 阅读 · 0 评论 -
Paintball UVA - 11853(模拟,贪心)
链接 一个模拟题,我们要从与上边界相切的圆开始考虑,然后考虑与这种圆相切的圆,如果这种圆和左边界有交点,就比较之后修改入点,和右边界有交点,就比较之后修改出点,因为他们上面都是出不去的#include <bits/stdc++.h>#define ll long long#define pb push_back#define inf 0x3f3f3f3f#define r...原创 2018-02-10 20:04:43 · 175 阅读 · 0 评论 -
System Dependencies UVA - 506(细节题)
细节题,有一点需要注意,就是vector中的erase和remove配合使用才能删除元素,详见STL中erase和remove的使用#include <bits/stdc++.h>#define ll long long#define pb push_back#define inf 0x3f3f3f3f#define rep(i,a,b) for(int i=a;i<...原创 2018-02-09 11:49:19 · 208 阅读 · 0 评论 -
UVA - 1572 Self-Assembly (状态化简,找环)
把标号看成点,正方形看成边,如果一个点和另一个正方形的一个点有链接的话,那么可以看成这个点和另一个正方形的剩下三个点之间有有向边,所以我们可以把所有点编号,建图,然后找有没有环就好了。 不过还是有很多小技巧的,比如建边时,一个点的编号异或1的编号可以与这个正方形其他点建边#include #define ll long long#define pb push_back#define原创 2018-02-06 11:14:58 · 262 阅读 · 0 评论 -
Division UVA - 725(暴力)
题目链接 直接枚举第一个数字,然后如果可以整除n的话除以n得到第二个数字判断第二个数字是否满足条件,我感觉我的代码好长长长。。。#include <bits/stdc++.h>#define ll long long#define pb push_back#define inf 0x3f3f3f3f#define rep(i,a,b) for(int i=a;i<b...原创 2018-02-11 23:21:26 · 273 阅读 · 0 评论 -
Maximum Product UVA - 11059(水题)
闲得无聊刷到水题,但还是错了0.0 第一点注意的每个输出后面都有空行 第二点要用long long 第三点mx初值为0#include <bits/stdc++.h>#define ll long long#define pb push_back#define inf 0x3f3f3f3f#define rep(i,a,b) for(int i=a;i<b;...原创 2018-02-13 23:33:37 · 161 阅读 · 0 评论 -
UVA - 10976 Fractions Again?!(水题)
水题:直接从k+1到2*k枚举即可#include<bits/stdc++.h>#define ll long long#define inf 0x3f3f3f3f#define pb push_back#define rep(i,a,b) for(int i=a;i<b;i++)#define rep1(i,b,a) for(int i=b;i>=a;i...原创 2018-03-05 16:10:21 · 164 阅读 · 0 评论 -
UVA - 524(dfs水题)
直接dfs,找到最后一个与1相加判断是不是素数即可#include<bits/stdc++.h>#define ll long long#define inf 0x3f3f3f3f#define pb push_back#define rep(i,a,b) for(int i=a;i<b;i++)#define rep1(i,b,a) for(int i=b;i&g...原创 2018-03-05 16:27:27 · 135 阅读 · 0 评论 -
UVa 1625 颜色的长度(dp)
#include&lt;bits/stdc++.h&gt;#define inf 0x3f3f3f3fusing namespace std;const int N=5e3+100,M=27;/* c[i][j]表示在字符串1中移走了i个字符 在字符串2中移走了j个字符 在主字符串中已经开始还未结束的字符个数*/int c[N][N],s1[M],e1[M],s...原创 2018-05-08 18:00:13 · 222 阅读 · 0 评论