UVA
文章平均质量分 74
Lanifer
这个作者很懒,什么都没留下…
展开
-
UVA 11375 Mathes
题目来源:UVA - 11375原题概述:问用n根火柴能摆出多少个非负整数? 不需用完全部火柴,不能有前导零(可以是整数0),如2根火柴只能摆出2.分析:用d[i]表示状态:用i根火柴能构成的整数的个数。依此往后面添加数字x,就从状态i转移到状态i+c[x],c[x]代表数字x需要的火柴数。因此可以递推得出答案。但是还存在两个问题:前导0的处理 和 大数运算。1. 前导原创 2013-09-06 01:02:05 · 861 阅读 · 0 评论 -
UVA 11549 Calculator Conundrum
题目链接这题学到了 Floyd 判圈法, 虽然时间上比hash略差,但空间优化程度极高,O(1)太牛逼了一定会出现循环的情况下,可以考虑使用Floyd判圈法。以此题来说明原理:使用条件是必须会出现循环。k1和k2起点相同,但每次k2都比k1多走一步,可以想象,在有限步骤内k2必然会追上k1.代码:#include #include #include usin原创 2013-10-31 15:49:15 · 632 阅读 · 0 评论 -
UVA 1326 Jurassic Remains
题目链接: 白书中高效算法设计中的例题,是个很好的题,学到了“中途相遇法”,太有用了,39ms就过了,直接枚举18s都TLE。核心是将一个问题如果分成两个子问题,并且从子问题可以算出整体解,那么可以先将左半解暂存起来,再枚举右半部分,直接在左半解中查找对应的另一半.代码:#include #include #include #include #include usin原创 2013-11-02 00:53:27 · 554 阅读 · 0 评论 -
UVA 10635 Prince and Princess [序列无重复元素时 LCS转换成LIS问题求解 O(nlogn) ]
题目链接:将第一个序列映射到1......n^2, 第二个序列按该映射重新编号,但注意第一个序列没出现的可以直接删除。接下来问题就转换为经典的LIS,该问题可在O(nlogn)内解决。代码:#include #include #include #include using namespace std;const int maxn=250*250+50 , INF=(i原创 2013-11-04 21:56:53 · 802 阅读 · 0 评论 -
UVA 11134 Fabled Rocks [贪心,但与一般题有些不同]
题目链接容易发现,行与列是相互独立的,可以单独考虑 。 看到白书上提示说是经典问题的变形,还以为是八皇后之类的,于是写了个回溯,果然TLE了。仔细考虑后,可以对所有的区间[L,R]按某个顺序排好后,直接将1,2.....n填入每个区间即可。怎样去排序呢,可能想到L小的要排前,L相同按R小的排前,因为将最小的数字填入 排好序后的第一个区间 不会使结果变糟。 可是这种贪心策略是正确的吗原创 2013-11-06 22:41:21 · 816 阅读 · 1 评论 -
UVA 10561 Treblecross(组合游戏_SG定理的应用)
题目地址例题 ,强大的SG定理。。SG != 0 -----win ; SG == 0 -----lose ;SG的计算:单个游戏: SG = mex ( S ) , S是所有后继态(可能是单个游戏,也可能是组合游戏)的SG函数值集合。组合游戏: 各子游戏SG值的亦或值参考代码:#include #include #include #include原创 2013-11-23 15:01:44 · 859 阅读 · 0 评论 -
VUA 11828 Back to Kernighan-Ritchie(状态机,高斯消元法解线性方程组)
题目链接初次做线性方程组的题。可用高斯-约当消元法将原增广矩阵化为对角阵。需要注意无穷解、不定解等特殊情况。。用一组数据解释一些特殊情况:51 22 33 24 55 40 051 2 3 4 50化简后的对角阵为:1.000000 0.000000 0.000000 0.000000 0.000000 1.0000000.原创 2013-11-27 13:27:14 · 907 阅读 · 0 评论 -
LA 4064 Magnetic Train Tracks
LA 4064 Magnetic Train Tracks从这题中学到了按极角排序后再统计的方法,类似的题有uva11529 Strange Tax Calculation.由于价格也路程的平方成正比,且要使最短路程同时也价钱最少,故只有锐角三角形符合要求。我们知道每一个直角或钝角一定是对应一个三角形,这很利于从反面进行统计,(而统计锐角却很棘手,不管什么三角形都存在锐角),然后以该钝原创 2014-01-10 02:01:43 · 902 阅读 · 0 评论 -
UVa 11419 SAM
求最小覆盖集 , 并输出方案。二分图的相关性质: 最小覆盖集 = 最大匹配数最大独立集 = 节点数 - 最大匹配 即最大独立集和最小覆盖集互补。要输出方案的话 。 从所有左边的未匹配点出发dfs()则有: 最大独立集 = S + T' 最小覆盖集 = S' +T .代码:#include #include原创 2014-03-08 00:04:59 · 892 阅读 · 0 评论 -
uva 11992 Fast Matrix Operations(线段树)
模板题:区间原创 2014-04-04 01:13:58 · 688 阅读 · 0 评论 -
UVA 1267 Network
题目链接题目大概是说N台机器连接成一个树形网络,没个服务器的覆盖范围是K,求最少需要的服务器数量。分析:将VOD做为根节点,建立一棵树。从深度最大的节点u开始考虑,设它的第k祖先是P,Q是第1,2,3......K-1祖先中的任意一个,可以证明:对于节点u来说,选Q作为覆盖它的服务器不会比选P更好,这是因为Q能覆盖到的全部节点P也一定能够覆盖到。接下来发已经覆盖的节点删除,重复相同的操作即原创 2013-10-31 09:48:12 · 719 阅读 · 0 评论 -
UVA 11081 Strings
题目: 把A的子串和B的子串 穿插 起来,问用多少种方案的到C, 如Now suppose there are two subsequences “abc” and “de”. By combining them you can get the following strings “abcde”, “abdce”, “abdec”, “adbce”, “adbec”, “adebc原创 2013-10-10 12:03:18 · 660 阅读 · 0 评论 -
UVA 11806 Cheerleaders
题目来源:UVA - 11806原题概述:在n*m的矩形网格中放置k个相同的石子,要求第一行、最后一行、第一列、最后一列都不能空。问有多少种方法?分析:要是在没有限制的n*m网格中放置k个石子,很容易得到答案:C(n*m,k)。 很庆幸,通过容斥原理可将原问题转化为该问题。设可随意放的方案集为S, 满足“第一行不放石子”的方案集为A,最后一行不放石子的方案集为B,第一列原创 2013-09-05 20:19:18 · 772 阅读 · 0 评论 -
UVA 10780 - Again Prime No Time
UVA 10780 - AgainPrime No Time 原题大意:已知m和n,求最大的k ,使(m^k) | n!。分析:我们知道,对于a=a1^p1*a2^p2*……an^pn , b=b1^q1*b2^q2*……bn^qm, 若a | b,则 a的质因子集A={a1,a2,…..,an}必定是b的质因子集B={b1,b2,….,bm}的子集,且对于所有ai=bj有pi原创 2013-09-05 14:44:00 · 722 阅读 · 0 评论 -
UVA 103 Stacking Boxes(最长增长子序列变形)
题目: 对于K维空间的盒子,你可以进行任意旋转, 如果某个盒子没一维长度都比另一个盒子对应长度短,则前者能够嵌套在后者里面,求一个最长的嵌套链。一看到这题就有似曾相识的感觉,仔细一想,这不就是个最长增长子序列问题吗。 两者明显有个对应关系,最长曾长子序列是满足后面的数大于前面的数,而这里是后面的盒子能套住前面的盒子。为了便于比较,我们可以将K为长度按递增排列, 盒子也按大小递增排列。。原创 2013-10-08 00:05:03 · 745 阅读 · 0 评论 -
UVA 10405 Longest Common Subsequence
坑题 字符串可能包含空格。。最好用gets输入最长公共子序列模板:#include#include#includeusing namespace std;const int maxn=1050;char s1[maxn],s2[maxn];int c[maxn][maxn];int main(){ while(gets(s1+1)&&gets(s2+1)原创 2013-10-08 00:43:16 · 538 阅读 · 0 评论 -
UVA 674 Coin Change (基础dp)
题目: 只用五种面值的钱币,50-cent, 25-cent, 10-cent, 5-cent, and 1-cent,问能有多少方式得到给定数目的钱。分析: dp题,为了避免重复计算,可以给人为的定一个顺序,比如 每次新添加的钱币面值不能比当前最后一张的面值大。代码:#include#include#includeusing namespace std;cons原创 2013-10-08 23:23:37 · 608 阅读 · 0 评论 -
UVA 10003 Cutting Sticks(区间dp)
题目: 这次的任务是切木棍,在每个给定的位置切一刀,每次花的钱是木棍的长度。 分析: 类似于矩阵链乘问题,区间dp状态转移方程:F(L , R) = min { F(L , K) + F(K , R) +R-L } (K是所有L到R间要切的位置)还需注意一点:一刀不切也要钱,你说有带这么坑的商家吗?代码:#include#include原创 2013-10-09 00:46:27 · 534 阅读 · 0 评论 -
UVA 11137 Ingenuous Cubrency
题目来源:UVA 11137 原题概述:将n表示成多个立方数之和,问有多少种表示方式?如:21可表示为21个1、1个8+13个1、2个8+5个1,共3种方式。分析:这是一道多重背包问题的变形,容量为累加和,第i个数的代价为i^3,价值为方法数。用d(i,j)表示“只使用前i个整数的立方,累加和为j”的方法数。状态转移方程为:d(i,j)=sum{ d(i-1,j-k*i^3原创 2013-09-06 11:36:03 · 628 阅读 · 0 评论 -
UVA 11021 Tribbles(白书上的题)
#include#include#includeusing namespace std;const int maxn=1010;double p[maxn],f[maxn];int n,m,k;int main(){ // freopen("out.txt","w",stdout); // freopen("in.txt","r",stdin); int T,c原创 2013-09-23 23:48:51 · 745 阅读 · 0 评论 -
AC自动机学习
题意: 在一个文本串中找出出现次数最多的原创 2014-04-09 00:35:29 · 725 阅读 · 0 评论