摘要:
题目链接: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< 阅读全文
摘要:
题目链接: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 阅读全文
摘要:
题目链接: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 阅读全文
摘要:
题目链接: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 阅读全文
摘要:
题目链接: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> 阅读全文
摘要:
题目链接: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 阅读全文
摘要:
题目链接: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 # 阅读全文
摘要:
题目链接: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时就去匹配判断一次,复杂度有点高。这里显然可以优化,就是从后开始判断,然后依次记录每个模 阅读全文
摘要:
题目链接: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 阅读全文
摘要:
题目链接: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 阅读全文