摘要: 题目链接:http://poj.org/problem?id=2031 很典型的最小生成树题目。 1 //STATUS:C++_AC_0MS_252KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algorithm> 9 #include<vector>10 #include< 阅读全文
posted @ 2013-01-20 02:05 zhsl 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2635 重点在万进制优化,主要是mod操作少了很多。 1 //STATUS:C++_AC_938MS_4432KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algorithm> 9 #include<vector>1 阅读全文
posted @ 2013-01-20 02:01 zhsl 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1942 水题一枚,递推求解组合数即可。 1 //STATUS:C++_AC_16MS_184KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algorithm> 9 #include<vector>10 #includ 阅读全文
posted @ 2013-01-20 01:58 zhsl 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1019 水题一枚,分段查找即可,只是处理上要注意细节。 1 //STATUS:C++_AC_0MS_428KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algorithm> 9 #include<vector>10 阅读全文
posted @ 2013-01-20 01:55 zhsl 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1080 题目大意是匹配DNA分子,使得DNA可能性最大。开始自己想的是O(n^3)的算法,构造字符串,然后在状态转移,结果POJ过了,但是HDOJ WA,果然POJ的数据比较水,但是现在还没有想出问题在哪里(明天把问题找出来)。其实这个类似于LIS,基本模型:E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij}。 POJ AC/HDOJ WA代码: 1 //STATUS:C++_POJ AC/HDOJ WA_79MS_584KB 2 #include<stdio.h> 阅读全文
posted @ 2013-01-20 01:52 zhsl 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2533 基本DP:f[i]=max{f[j]}+1。 1 //STATUS:C++_AC_32MS_184KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algorithm> 9 #include<vector>10 阅读全文
posted @ 2013-01-20 01:43 zhsl 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1260 基本DP,只要证明最优解中不会有交叉替换,得出转移方程:f[i]=min{f[j]+(a[j+1]+..+a[i]+10)*p[i]}。由(ai+10)*bi+(aj+10)*bj=(ai+aj+10)*bj ==> (ai+10)*bi=ai*bj 替换==> t*bi=ai*bj 可证。 1 //STATUS:C++_AC_0MS_176KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 # 阅读全文
posted @ 2013-01-20 01:41 zhsl 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3267 题目大意是,给定一个文本串和n个模板串,要你去掉文本串中最少的字母,使得文本串能连续的被模板串匹配。有点像LIS,基本的DP模型:E[j]=opt{D+w(i,j)}。用f[i]表示前i个字符连续被模板串匹配时去掉的最少的字符个数,则f[i]=min{f[j]+(i-j+1)-max{lengthstring}},(0<=j<=i-1)。lengthstring为在i-j子串中能被匹配的模板串的长度。如果我们在没求一次i-j时就去匹配判断一次,复杂度有点高。这里显然可以优化,就是从后开始判断,然后依次记录每个模 阅读全文
posted @ 2013-01-20 01:22 zhsl 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1837 题意是给定一个平衡杆,平衡杆的两端某些位置有钩子可以放置砝码,现在给定一些砝码,要你求出有多少种方法能使之保持平衡。方法是用平衡度的方法来进行状态转移,f[i][j]表示前i个物品的平衡度为j时的状态总数,则转移方程为f[i][j+c[k]*g[i]]+=f[i-1][j],显然f[m][0]就是最终答案,不过数组下标不能为负数,映射一下就可以了。 1 //STATUS:C++_AC_16MS_1632KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #in 阅读全文
posted @ 2013-01-20 00:56 zhsl 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2513 建立无向图,看图是否存在欧拉道路。首先判断图是否连通,可以用并查集或者一遍BFS判断,最后判断入度数就可以了。 1 //STATUS:C++_AC_1266MS_79348KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algo 阅读全文
posted @ 2013-01-20 00:08 zhsl 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 本文根据经典的TC教程完善和改编。TopCoder:http://www.topcoder.com/基本规则TopCoder的比赛类型很多,最常见的是周赛SRM(Single Round Match),另外还有TCHS SRM(TopCoder High School SRM,题目和SRM一样,仅限中学生参加,参赛者水平较低,据说涨rating很容易),马拉松(Marathon Matchs),还有TCOpen(每年两次的大比赛)之类的比赛。因为大多数人都在做SRM,所以本文介绍的TC比赛即为SRM。SRM的规则总结起来就是一句话:75分钟做完3道难度递增的题。TC的每个用户(handle)都 阅读全文
posted @ 2013-01-10 15:50 zhsl 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 一、TC基本介绍TC的网址www.topcoder.com/tc,我们一般提到TC的时候是特指其中的Single Round Match(SRM)。SRM的规则总结起来就是一句话:75分钟做完3道难度递增的题。TC的每个用户(handle)都有自己的积分(rating),从0-3000+不等。成绩越好,分数越高。积分与颜色的对应为:白色——未参赛(unrated);灰色——0~899;绿色——900~1199;蓝色——1200~1499;黄色——1500~2199;红色——2200+。另外排名最高的几个人在TC客户端中会变成红色靶子图标。比赛分为两个Division,Div I和Div II。 阅读全文
posted @ 2013-01-10 15:44 zhsl 阅读(1835) 评论(0) 推荐(4) 编辑
摘要: 转载Nazgul的,这玩意果断神了。。e100 33 f6 bf 0 20 b5 10 f3 a5 8c c8 5 0 2 50 68 13 1 cb e 1f be a1 1 bf 0 1e11b 6 57 b8 11 1 bb 21 13 89 7 4b 4b 48 79 f9 ad 86 e0 8b c8 bd ff ff e8 20e134 0 3d 0 1 74 1a 7f 3 aa eb f3 2d ff 0 50 e8 f 0 5a f7 d8 8b d8 26 8a 1 aae14f 4a 75 f9 eb de cb 57 bb 21 13 8b c1 40 f7 27 f7 阅读全文
posted @ 2013-01-08 17:21 zhsl 阅读(1510) 评论(3) 推荐(1) 编辑
摘要: 题目链接:http://poj.org/problem?id=3253 题目大意是,把一块长木板割成n快给定长度的木板,每次的花费为当前模板的长度,求最小的花费。逆向求解即可,贪心的思想,每次取两块木板长度最小的,花费为量长度之和,然后把新的长度加进去,操作n-1次,就是一个huffman树的构造过程。然后用优先队列搞之。 1 //STATUS:C++_AC_16MS_348KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 # 阅读全文
posted @ 2013-01-06 10:33 zhsl 阅读(299) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2151 组合数做肯定超时,容易看出是DP。f[i][j]表示某个队的前j个题目做出i个题目的概率,则f[i][j]=f[i][j-1]*(1-num[j])+f[i-1][j-1]*num[j]。接下来就直接好求了,对每个队求出至少答对一个的概率,然后依次相乘就是满足题目的第一个条件,然后再减去每个队答对n-1个的概率的积就是最终概率了。 1 //STATUS:C++_AC_32MS_192KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<s 阅读全文
posted @ 2013-01-06 00:57 zhsl 阅读(194) 评论(0) 推荐(0) 编辑