
UVaOJ
文章平均质量分 53
rising_fallmoon
我是蒟蒻
展开
-
UVa 531: Compromise
求最长公共子序列(LCS)并打印序列。dp解决,各节点标记最终的序列选择,最后递归打印即可。我的解题代码如下:#include #include #include #include #include using namespace std;#define max(a,b) (a>b?a:b)#define WORDLEN 32#define SENTENCELEN 102原创 2013-08-31 10:47:10 · 873 阅读 · 0 评论 -
UVa 674: Coin Change
动态规划题。对于1,5,10,25,50五种币值的硬币,编号为0~4,存入数组cent中。数组iWay的元素iWay[k][i]表示仅使用0~i的硬币凑出k分钱的方法数,按是否使用编号为i的硬币分类,可得到状态转移方程iWay[k][i]=iWay[k][i-1]+iWay[k-cent[i]][i]。一个优化的方法:分析可知取15,16,17,18,19分钱的方法数是相同的,因为它们的差距只原创 2013-08-22 13:14:41 · 828 阅读 · 0 评论 -
UVa 10397: Connect the Campus
这道题是最小生成树(MST)问题的变种问题。在我的最小生成树的Prim算法的模板基础上增加一个vis数组用于区分节点是否已加入集合T中。这里不能使用节点的min_dis为0作为该节点是否加入T中,因为题目中给出了已经相连的边,而我们将其权值设为了0,需要另加数组判断。我的解题代码如下:#include #include #include #include #include #原创 2013-08-09 15:22:12 · 1284 阅读 · 0 评论 -
UVa 138: Street Numbers
简单数论题,注意使用long long类型,最好直接打表,因为只要输出十行。我的解题代码如下://#include #include /*#include #include #include #include #include using namespace std;*/int main(){ printf(" 6 8\n""原创 2013-08-08 18:12:00 · 999 阅读 · 0 评论 -
UVa 11748: Rigging Elections
先附上题目如下:Elections in your country are performed in a one-on-one elimination style. Each week, two people are chosen from a pool of candidates and the country votes on which one they prefer. The lo原创 2013-08-08 17:06:47 · 1031 阅读 · 0 评论 -
UVa 10048: Audiophobia
这道题要求我们求出图中的给定的两个节点(一个起点一个终点,但这是无向图)之间所有“路径中最大权值”的最小值,这无疑是动态规划。我开始时想到根据起点和终点用动态规划直接求结果,但最终由于题中S过大,会超时。超时的代码如下:#include #include #include #include #include #include #include using namespa原创 2013-08-05 18:46:51 · 1104 阅读 · 0 评论 -
UVa 10905: Children's Game
这真是一道有趣的题目,不知道别人怎么想,总之我觉得这题真的很有意思,值得一做。先附上题目:There are lots of number games for children. These games are pretty easy to play but not so easy to make. We will discuss about an interesting game her原创 2013-08-01 13:27:06 · 1862 阅读 · 1 评论 -
UVa 621: Secret Research
简单题,不解释。我的代码如下:#include #include #include #include #include #include #include using namespace std;char s[1000];int main(){ int T; cin >> T; while(T--) { cin >> s; int len=strlen原创 2013-08-04 17:05:12 · 1016 阅读 · 0 评论 -
UVa 10025: The ? 1 ? 2 ? ... ? n = k problem
这道题仔细思考后就可以得到比较快捷的解法,只要求出满足n*(n+1)/2 >= |k| ,且n*(n+1)/2-k为偶数的n就可以了。注意n==0时需要特殊判断。我的解题代码如下:#include #include #include #include #include #include #include using namespace std;int main(){原创 2013-08-04 18:00:13 · 1993 阅读 · 0 评论 -
UVa 253: Cube painting
这道题要我们判断对于一个立方体用三种颜色染色(可以只使用其中的一种或两种颜色),题目所给的两种染色方案本质上是否相同(即立方体经过翻转后可重合)。对于这道题,我们只要枚举出第一种染色方案下的立方体所有能够通过翻转产生的其他本质相同的染色方案,与第二种方案比较就可以得到结果。即枚举立方体绕X,Y,Z轴旋转后的结果(三个轴均可以绕着旋转0度,90度,180度,270度),最多4^3=64中情况原创 2013-08-04 16:44:23 · 1497 阅读 · 0 评论 -
UVA 10003: Cutting Sitcks
动态规划题。切棍子,类似矩阵连乘问题(Matrix Multiplication problem)。当时我先写了一个比较简洁的递归代码,但是超时了。。。超时代码如下,虽然超时,但可以很好的体现出状态转移:#define INF 50000int c[50];int dp(int left, int right, int cleft, int cright){ if(cleft==原创 2013-08-22 17:49:11 · 805 阅读 · 0 评论 -
UVa 116: Undirectional TSP
简单动态规划题。用取模实现第一行与最后一行连续,注意取字典序即可。我的解题代码如下:#include #include #include using namespace std;#define min(a,b) ((a<b)?a:b)#define max(a,b) ((a>b)?a:b)#define UL(i) ((i+M-1)%M)#define DL(i) ((i+原创 2013-08-23 12:54:22 · 968 阅读 · 0 评论 -
UVa 1394: And Then There Was One
设置一个数组Winner记录经典约瑟夫问题中的剩余者即可递归解决该问题。注: 约瑟夫问题:有编号为0~n-1的n个人,从0号开始报数1,2,3......报到k的杀死,然后从下一个人开始继续报数1,2,3......直到剩下最后一个人。约瑟夫想要活下来,问他一开始需要站在几号位置(编号为几)。数组Winner也可以只用一个变量代替。我的解题代码如下:#include #inclu原创 2013-08-18 23:17:19 · 1100 阅读 · 0 评论 -
UVa 624: CD
这道题由于每组数据最多只有20个,其可能组成的时间总长度最多有2^20大约10^6中,一个数组可以放下,我使用了vector。选出vector中存有的总时间长度的最大者(且不超过N),根据其序号计算出该最大时间总长度包含了哪些数据即可。我的解题代码如下:#include #include #include #include #include #include using n原创 2013-08-29 10:53:10 · 859 阅读 · 0 评论 -
UVa 348: Optimal Array Multiplication Sequence
最优矩阵链乘问题。经典dp问题。我的解题代码如下,其中dp[i][j]表示计算从第i个矩阵到第j个矩阵的矩阵链的乘积所需的最少乘法次数,dpi[i][j]表示计算从第i到第j个矩阵乘积所做的最后一次乘法在第dpi[i][j]个矩阵之后的位置。#include #include #include #include #include using namespace std;#de原创 2013-08-28 22:15:16 · 994 阅读 · 0 评论 -
UVa 10405: Longest Common Subsequence
经典的求最长公共子序列(Longest Common Subsequence, LCS) 的一道题,动态规划妥妥的。要注意的地方是输入的串可能是空串,所以不要用cin。我的解题代码如下:#include #include #include using namespace std;#define MAXN 1005#define max(a,b) ((a)>(b)?(a):(原创 2013-08-16 22:56:58 · 1007 阅读 · 0 评论 -
UVa 562: Dividing Coins
题意:给一串数字作为硬币的币值,将这些硬币分给两个人A和B,要求越平均越好。假设总钱数为Sum且A分得的钱不超过B,开数组dp,dp[i]表示A是否可以分得一些硬币使得其总钱数为i,dp[i]为1表示可以,0表示不可以。dp数组初始化为0,dp[0]=1。然后分别对M个硬币枚举,判断dp是否可置为1即可。最后选择离Sum/2最近且dp[i]==1的i即可。我的解题代码如下:#inc原创 2013-08-28 10:20:13 · 862 阅读 · 0 评论 -
UVa 357: Let Me Count The Ways
解法同UVa 147。代码如下:#include #include #include #include #include using namespace std;#define max(i,j) (i>j?i:j)#define maxn 30005const int value[5] = { 1, 5, 10, 25, 50 };long long nWay[maxn原创 2013-08-27 09:25:57 · 906 阅读 · 0 评论 -
UVa 147: Dollars
解法同UVa 674。只不过改用了滚动数组。代码如下:#include #include #include #include #include using namespace std;#define max(i,j) (i>j?i:j)#define maxn 6005const int value[11] = { 1, 2, 4, 10, 20, 40, 100, 20原创 2013-08-26 12:47:58 · 1073 阅读 · 0 评论 -
UVa 10192: Vacation
依旧LCS,dp解决,套模板即可。注意字符串中可以有空格。解题代码如下:#include #include #include #include #include using namespace std;#define max(a,b) ((a)>(b)?(a):(b))#define maxn 105char Seq1[maxn], Seq2[maxn];int N原创 2013-08-25 12:51:09 · 983 阅读 · 0 评论 -
UVa 10066: The Twin Towers
最长公共子序列(LCS)问题,dp解决。要注意每次输出结果后要空行!!!题目的例子上居然没空,害我WA了两次才找到原因 =--=解题代码如下:#include #include #include #include #include using namespace std;#define max(a,b) ((a)>(b)?(a):(b))#define maxn 105原创 2013-08-25 11:27:18 · 1152 阅读 · 0 评论 -
UVa 10131: Is Bigger Smarter?
动态规划题。类似UVa103 Stacking Box,都是题目给一种判断嵌套的方法然后求最长序列。提前对数据排序可以节省一些时间开销。我的解题代码如下:#include #include #include #include #include using namespace std;#define MAXN 1005int N;int w[MAXN],s[MAXN];原创 2013-08-23 17:33:39 · 1147 阅读 · 0 评论 -
UVa 729: The Hamming Distance Problem
这道题只要枚举出所有情况就可以了。从最左边一位开始分别讨论为0和为1 两种情况,向右递归。我的解题代码如下:#include #include #include #include #include #include using namespace std;int s[16];int T,N,H;void f(int curn, int curh){ if(cu原创 2013-07-29 12:40:15 · 860 阅读 · 0 评论 -
UVa 10361: Automatic Poetry
这题是一道简单的字符串处理题。输入的时候将s1,s2,s3,s4,s5都记下来等到第二行输出就行。第一行输入开始时的字符进入s1串中,然后遇到'' 就将以后读入的字符 进入下一个串中,遇到’\n'则s5已经结束。我的代码如下:#include #include #include #include #include using namespace std;int原创 2013-07-28 16:01:37 · 803 阅读 · 0 评论 -
UVa 537: Artificial Intelligence?
这是一道简单的字符串处理题。由于'='是DataField中才会出现的,故读到'='时则已经读到了等式。用'='前一个字符判断读到的是P,U,I中的哪一个,'='后读入的是一个double型和一个char型,通过读入的char型判断是否有后缀prefix即可。我的解题代码如下:#include #include #include #include #include using n原创 2013-07-28 17:14:17 · 912 阅读 · 0 评论 -
UVa 10763: Foreign Exchange
这题效率低的解法还是很容易做出的,只要注意判断输入的一种特殊情况即可,详见代码,我的解题代码如下:#include #include #include #include #include #include #include using namespace std;struct Pair{ int x, y;}data[500005];int cmp(const voi原创 2013-08-01 15:39:33 · 771 阅读 · 0 评论 -
UVa 408: Uniform Generator
这道题要求判断STEP和MOD的值是"Good Choice"还是"Bad Choice"。观察分析后可以发现step和mod互质时是Good Choice,否则为Bad Choice。下面证明:我们可以这样分析:因为所以 每次产生的seed只与上一个seed,STEP, MOD有关。当STEP, MOD的值确定时,假定第一个seed的值为0,则所得的seed序列是确定的。该序原创 2013-07-26 13:29:22 · 997 阅读 · 0 评论 -
UVa 568: Just the facts
这题要求N!的末尾非零位,考虑用模除法保留阶乘计算中每次乘法后所得结果的最后几位数。当遇到乘数为5的倍数时,从保留的最后几位数中分出2与乘数因子中的5配对。阶乘做完后模10得到结果。另:这种方法只适合N较小的情况。保留每次乘积的至少末5位,因为计算3125!的对饮结果时如果保留的位数过少,将没有足够的2与3125=5^5中的5匹配消去,会得到错误结果我的解题代码如下:原创 2013-07-25 19:49:19 · 848 阅读 · 0 评论 -
UVa 127: "Accordian" Patience
这题只是一道简单的模拟题而已(真的只是简单而已 =-= T^T),虽然我花了好长时间。我使用数组模拟链表,模拟对纸牌的操作。要注意的是堆剩余数为1时,输出的不是“piles",而是"pile"。我的解题代码:#include #include #include #include #include #include #include using namespace原创 2013-07-31 22:07:39 · 1046 阅读 · 0 评论 -
UVa 108: Maximum Sum
这道题用暴力解法+动态规划。分析如下:对于某个1*m的矩阵,即一个数列,求其maximal sub-rectangle,可以通过求最大长连续字串和来求得(这个用到了动态规划)。那么对于n*m的矩阵,将每列的各个数字求和,将得到一个1*m的矩阵,用上文所说的方法求得的最大和即为该n*m矩阵的所有行数为n的子矩阵中的最大子矩阵和。那么这道题,通过枚举所有行数为1、2、3.....N 的矩阵原创 2013-07-31 14:06:34 · 1172 阅读 · 0 评论 -
UVa 10098: Generating Fast
这道题要求按字典序生成字符串的全排列,不可重复(但字符可以重复,且区分大小写)。基本思路是先对输入的字符串按字典序排序,然后从第一位开始递归,从所有输入的字符中选出一个填充,然后再选第二位......具体实现看代码。要注意的是最后的输出方式,不小心的话会莫名其妙的WA,详情见代码。我的解题代码如下:#include #include #include #include #i原创 2013-07-30 22:54:10 · 986 阅读 · 0 评论 -
UVa 111: History Grading
这道题首先要对输入进行处理,解题的一般思路是将所给的c数组与r数组按照各个历史事件的rank重排,即最早的事件的编号放在数组的第一位......然后这题转化为求两个串的最长公共子序列长度的问题。但我使用了另外一种解法(虽然仍然要用动态规划 =-= ):只对输入的c数组重排(即c数组中c[i]存放rank为i的事件的编号),r数组不变。建立ans数组,ans[i]存放以rank为i为结尾的最原创 2013-07-31 13:21:48 · 1099 阅读 · 0 评论 -
UVa 993: Product of digits
这道题很简单。先将N用2,3,5,7(即10以内的素数)分解因数(需要先特殊判断N不为1),然后将可以合并的因数合并(如2*2合并成4,)这样求得的结果位数会减少,大小肯定会小一些。具体实现见代码。我的解题代码如下:#include #include #include #include #include #include #include using namespace st原创 2013-07-31 16:27:27 · 1146 阅读 · 0 评论 -
UVa 10004: Bicoloring
这道题要我们判断所给图是否可以用两种颜色进行染色,即"二染色“。已知所给图一定是强连通图。分析之:若图中无回路,则该图是一棵树,一定可以二染色。若图中有回路,但回路有偶数个节点,仍然可以二染色。仅当图中存在回路且回路有奇数个节点时,不能二染色。具体实现细节我在代码中给出了详细的注释,我的解题代码如下:/*关键在于:当且仅当存在奇回路时,无法二染色*/#include原创 2013-07-29 18:03:55 · 1155 阅读 · 0 评论 -
UVa 572: Oil Deposits
这道题很简单,深搜+标记就可以做出来了。我的解题代码如下:#include #include #include #include #include #include using namespace std;char grid[100][100];int m,n;int visit[100][100];const int dx[] = { -1, 1, 0, 0, -原创 2013-07-29 12:11:03 · 863 阅读 · 0 评论 -
UVa 10879: Code Refactoring
这题只要用两种方式分解一个不超过10,000,000的数就可以了。很简单就能过了。我的解题代码:#include #include #include #include #include using namespace std;int main(){ int N; int K; cin >> N; for(int k=0; k<N; k++) { ci原创 2013-07-27 12:48:08 · 835 阅读 · 0 评论 -
UVa 10061: How many zero's and how many digits?
这题有点复杂,题目要求十进制数N!在B进制下表示后末尾的0个数和总的位数。分析如下:1. 求末尾0的个数:思路是将N!分解为素数的积,记录下2. 求总的位数:由于B进制下m位数所能表示的最大值在十进制下为B^m-1,故 设总位数为m,则 B^(m-1) -1 取10为底的对数得到: (m-1)*log10(B) 故得到求总的位数m的方法。我原创 2013-07-26 18:31:02 · 1288 阅读 · 0 评论 -
UVa 10010: Where's Waldorf?
这道题是简单的字符串搜索问题。先将输入的m*n的表中字符全部换为小写, k次输入的字符串word[]同样转换为小写。然后在表中从左到右,从上到下搜索word[0], 找到后从word[0]所在位置向8个方向搜索是否有与word[]相同的字符串即可。我的代码如下:#include #include #include #include #include using names原创 2013-07-28 13:29:35 · 1394 阅读 · 0 评论 -
UVa 113: Power of Cryptography
这道题要求p开n次方的结果。貌似要用大整数类,但仔细看会发现p的范围并不超过double类型的表示范围(负值取值范围为 -1.7976E+308 到 -4.94065645841246544E-324,正值取值范围为 4.94065645841246544E-324 到 1.797693E+308),所以调用pow函数就可以了。注意pow计算后的结果要进行一个小处理防止结果出现小数。我的解原创 2013-07-28 12:47:16 · 840 阅读 · 0 评论 -
UVa 10161: Ant on a Chessboard
很简单的一题找规律题。我的解题代码如下:#include #include #include #include #include #include #include using namespace std;int main(){ int N; while(cin >> N && N!=0) { int level = floor(sqrt(double(N原创 2013-08-03 13:25:25 · 1223 阅读 · 0 评论