POJ
文章平均质量分 77
naughty610
follow me sina weibo : http://weibo.com/naughty610
展开
-
扩展欧几里得算法
poj 1061题目,青蛙的约会。一开始想暴力求解的。但是之前提交过,tle...今天过来查一下,说是扩展欧几里得算法。我了个去。这么复杂的名字,得是有多深奥。查了才知道原来就是辗转相除法。欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。 其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - k原创 2011-02-27 11:15:00 · 737 阅读 · 0 评论 -
POJ 1068 Parencodings
虽然是水题,但是还是费力。思路:先转换成01串,其中0表示‘(’,1表示‘)’,再从头扫描,如果是0则跳过,我们关心的是1。如果是1,则匹配前面的0。默认应该是匹配1个0,记为count0。这里匹配时候分为两种情况,第一,如果往前扫描时候遇到1,则应该将countzero加1,表示应该多匹配一个0。第二,如果往前扫描时候遇到0,如果countzero为0,则表示匹配出来了,当前遇到的这个0就是我们要匹配的那个0。否则则将countzero减1,继续下一次匹配。java代码如下:import java.uti原创 2011-03-27 02:04:00 · 549 阅读 · 0 评论 -
Trie树 POJ 1056
<br />Trie树提供给了一种能够在字符串的长度n时间内判断出来是否在已有集合中已经存在这个字符串了。<br />1056是判断前缀码的问题。如果所有字符串都不是其他的字符串的前缀的话,那么就是可以直接编码的。<br /> <br />java代码如下:<br />其中TrieTree类提供了一种建立字典树的方法。在字典树的建立过程中,可以同时求出是否已经存在该字符串。<br />代码中注释的比较清楚了。<br /> <br />import java.util.Scanner;public cla原创 2011-03-30 12:54:00 · 862 阅读 · 0 评论 -
POJ 1050 最大子段和的延伸 最大子矩阵
<br />1050计算最大子矩阵,枚举行(连续的),加到一个一维数组中,再利用一个一维数组求最大子矩阵的方法,得到临时的最大子段和,枚举结束之后,得到的就是整个矩阵的最大子段和了。<br />java code:<br />package test;import java.util.Scanner;//1050public class Main { public static void main(String args[]) { Scanner cin = null; cin原创 2011-03-30 21:27:00 · 760 阅读 · 0 评论 -
求集合的全部子集
import java.util.ArrayList;import java.util.List;public class Main { public static void main(String ss[]) { int a[] = { 1, 2, 3 }; p(a); } /** * 集合的所有子集 * * @param s * @return原创 2011-11-02 19:35:12 · 1322 阅读 · 0 评论 -
后缀数组
后缀数组详细讲解董的博客:http://dongxicheng.org/structure/suffix-array/转载 2012-02-17 09:07:47 · 496 阅读 · 0 评论 -
背包问题 没有进行空间优化的java代码
dp 1、当背包只能承重1的时候,检查每种物品能否放进去,放进去能否得到最大value。2、当背包只能承重2的时候,检查每种物品能否放进去,放进去能否得到最大value。这里,当承重为2的时候,放物品需要有两种考虑。一:如果所检查的物品比承重2大的话,这种物品是不用考虑的。二:如果所检查的物品比承重2小,那么也分为两种情况。(1):如果不放某一种物品,而是放这种物品前面的所有物原创 2011-04-01 13:44:00 · 816 阅读 · 0 评论 -
最大子段和动态规划实现
找到《最大子段和问题的动态规划求解》的pdf,讲解很透彻。public class Main { public static void main(String s[]) { int[] a = { -2, 11, -4, 13, -5, -2 }; System.out.println(maxSubSum(a)); } public static int max原创 2011-11-02 15:53:39 · 783 阅读 · 0 评论 -
将整数分解成为连续的自然数之和
From: http://www.blker.com/?p=745找到的讲的最细致的一篇博文。不过文里面代码变量w声明类型应该是double,#include #include int main(int argc, char* argv[]){ // 等差数列求和公式 Sum = n*aFirst + n*(n-2)/2; // Sum 为要拆分的整数,转载 2011-11-19 12:34:54 · 1195 阅读 · 0 评论 -
01背包问题 poj 3624
理解01背包问题,首先要从二维数组的开始。二维数组的理解之后,优化成为一维,就是轻而易举的事了。01背包动态规划的转移公式:当考虑第i件物品的时候,背包能装得下的话,dp(i,j)=max{dp(i-1,j),dp(i-1,j-w[i])+v[i]}如果背包装不下第i件物品的话dp(i,j)=dp(i-1,j)package p3624;import java.io.F原创 2012-04-09 20:30:13 · 2825 阅读 · 0 评论 -
POJ 1088 动态规划
package p1088;import java.io.File;import java.io.FileNotFoundException;import java.util.Scanner;public class Main { static int count=106; static int r; static int c; static int d[][] = new i原创 2012-04-09 17:01:40 · 869 阅读 · 0 评论 -
POJ1611 并查集
这个题目是并查集的相对交简单的题目。本人第一词一次提交就ac,鸡冻呀。将所有的组学生都union到一起,最后找到0号学生所在组的人数输出就可以了。package test;import java.util.Scanner;public class Main { static node[] stus = new node[30001]; public static void main原创 2011-03-30 19:48:00 · 895 阅读 · 1 评论 -
POJ并查集题目汇总
<br />转来的:http://hi.baidu.com/czyuan_acm/blog/item/531c07afdc7d6fc57cd92ab1.html<br /><br /><br /><br />并查集,顾名思义,干的就是“并”和“查”两件事。很多与集合相关的操作都可以用并查集高效的解决。<br /><br /><br /> 两个操作代码:<br /> int Find(int x)<br /> {<br /> if (tree[x].par转载 2011-03-27 16:21:00 · 702 阅读 · 0 评论 -
POJ题目分类
DP: 1011 NTA 简单题 1013 Great Equipment 简单题 1024 Calendar Game 简单题 1027 Human Gene Functions 简单题 1037 Gridland 简单题 1052 Algernon s Noxious Emissions 简单题 1409 Communication System 简单题,但是很容易看错~~~ 1425 Cr原创 2011-02-25 20:49:00 · 964 阅读 · 0 评论 -
POJ 1218
网络上有一种是发现打开门的规律,然后用数学的方法来解决的,但是一般发现比较困难。所以用了模拟的方法模拟器过程,用数组代表门的状态。package test;import java.util.Scanner;//使用数组记录门的开关状态,最终统计数组中的0的个数就是打开的门的个数public class test { public static void main(String args[]) { Scanner cin = new Scanner(System.in);原创 2011-02-28 20:11:00 · 878 阅读 · 0 评论 -
POJ 1013 称硬币
<br />先写一组测试数据。<br /> <br />12 ABCD EFGH even ABCI EFJK up ABIJ EFGH even AGHL BDEC even JKI ADE up J K even ABCDEF GHIJKL up ABC DEF even I J down ABCDEF GHIJKL up ABHLEF GDIJKC down CD HA even A B up B A down A C even A B原创 2011-03-13 16:53:00 · 937 阅读 · 0 评论 -
POJ 2453
<br />简单的输出一个从二进制来看,比输入数据大的第一个数字。<br />思路:<br />1.从最后一位开始扫描,扫猫到第一个1之后,从这个1开始往前进位,直到不能进位为止(期间把进位路上经过的位置0)。<br />2.进位之后,统计除了高位上直到刚刚进上的位,还缺少几个1,就在最后几位填充相应位数的1即可。<br />java code:<br />import java.util.Scanner;public class Main { public static void main(Str原创 2011-03-13 18:12:00 · 765 阅读 · 0 评论 -
POJ 1018 贪心思想
<br /><br />这个题目一开始看的时候也是想的动态规划的算法。但是上网搜搜看别人的想法,发现,dp的实在不多。用暴力求解的方法的倒是很多。<br />我觉得,用贪心的思想会好一点。<br />思路:枚举+贪心。枚举某一设备中最大的B,然后贪心寻找P的最小值。<br /> <br />java代码如下:<br /> <br /> <br />在调试的过程中,遇到了一个问题就是,MaxValue的问题,我这里在设置成Integer.MAX_VALUE的时候,结果是错误的,因为Integer.MAX_VA原创 2011-03-11 13:30:00 · 791 阅读 · 0 评论 -
ACM需要了解的基础知识
<br /><br />图论 <br /> 拓扑排序 <br /> 有向无环图与动态规划的关系<br /> 二分图匹配问题 <br /> 一般图问题与二分图问题的转换思路 <br /> 最大匹配 <br /> 有向图的最小路径覆盖 <br /> 0 / 1矩阵的最小覆盖 <br /> 完备匹配 <br /> 最优匹原创 2011-03-19 13:10:00 · 801 阅读 · 0 评论 -
计算组合数据的数目
public static int getCMN(int m, int n) { if (n == m) return 1; if (n == 1) return m; return getCMN(m - 1, n) + getCMN(m - 1, n - 1); } static int comb2(int m, int k) { int count = 0; for (int i = m; i >= k; i--) { if (k > 1原创 2011-03-23 17:53:00 · 2931 阅读 · 0 评论 -
POJ2524 并查集应用
import java.io.FileNotFoundException;import java.util.Scanner;public class Main2 { static Node[] nodes; static int count = 0;// 信仰个数 public static void main(String s[]) throws FileNotFoundExce原创 2011-11-02 15:17:34 · 753 阅读 · 0 评论