自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

三江小渡的专栏

三江小渡

  • 博客(80)
  • 资源 (2)
  • 收藏
  • 关注

原创 博客已经转移至pureisle.net

博客已经转移至http://www.pureisle.net 欢迎大家访问,主要是针对linux,算法,shell,数据处理,c++等方面的知识记录。

2012-02-13 19:26:08 617

原创 【POJ2411】Mondriaan’s Dream(动态规划)

discuss里看到的牛B方法。。。。短小精悍,看到后十分汗颜,就像做TC样。自己写老长的代码,跟排名前几的代码一比就像dog shit。要走的路还遥遥无期,根本没头啊~~~~。留下大家也观摩下吧。。。——————————用2进制的01表示不放还是放第i行只和i-1行有关枚举i-1行的每个状态,推出由此状态能达到的i行状态如果i-1行的出发状态某处未放,必然要在i行放一个竖的方块,所以我对上一行状态按位取反之后的状态就是放置了竖方块的状态。然后用搜索扫一道在i行放横着的方块的所有可能,并且把这些状态累加上i

2011-05-04 15:58:00 876

原创 【POJ1260】Pearls (动态规划)

<br /> <br />题意:现在要买若干种价值的珍珠,但买某种珍珠必须多付10颗此种珍珠的价钱,一颗珍珠可以用比它贵的珍珠充数,因此有时候用贵的珍珠来代替便宜的可能更省钱,输入要买的若干种珍珠,在可用高价珍珠充数的条件下,问最少需要花费多少钱.<br />假设有价值从x……y的珍珠,则在购买最大价值为z(x 所以可以得到状态转移方程为:<br />res[i]=min{res[i],(num[i]-num[j]+10)*p[i]+res[j]}<br />其中j<br />由状态转移方程我们发现如果合并

2011-05-03 15:26:00 677

原创 【POJ2479】Maximum sum(动态规划,DP)

<br />跟之前的求子段最大和差不多,不知道请看http://blog.pureisle.net/?p=266<br />这里求的是两个子段最大和,注意看数据,两个子段均不能为空(偶在这里多两次WA)。。。。另附POJ,discuss里边别人粘贴出来了一层循环写法。。。道理都差不多,时间也差不多。<br />#include <cstdio>#include <algorithm>using namespace std;int a[1000001];int res[1000001];i

2011-05-03 15:22:00 839

原创 Internal Server Error 解决办法

<br /> <br />The server encountered an internal error or misconfiguration and wasunable to complete your request.<br /> <br />Please contact the server administrator, webmaster@pureisle.net and informthem of the time the error occurred, and anything yo

2011-04-28 10:44:00 140655

原创 【POJ1179】Polygon (动态规划 DP)

<br /><br />多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形。每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”或“*”。所有边依次用整数从1到n编号。<br />游戏第1步,将一条边删除。<br />随后n-1步按以下方式操作:<br />(1)选择一条边E以及由E连接着的2个顶点V1和V2;<br />(2)用一个新的顶点取代边E以及由E连接着的2个顶点V1和V2。将由顶点V1和V2的整数值通过边E上的运算得到的结果赋予新顶点。<br />最后,所有边都被删除,游戏结束。

2011-04-28 10:36:00 1747

原创 【NYOJ222】整数中的

<br />#include<stdio.h>int a[256]={ 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 2,3

2011-04-28 08:20:00 639

原创 【POJ1125】Stockbroker Grapevine(动态规划,floyd)

<br />题意:股票Broker们需要在他们的客户中传播谣言,但是每个Broker只能传给他自己的顾客们。给出Broker们和他们所<br />拥有的顾客,求能让谣言传播从第一个人开始到最后一个客户的最短时间。使用Floyd算法。输入样例是有多少经纪人,随后是每行第一个数是相应编号的经纪人联系的人,然后之后每对数表示联系的人的编号和联系需要花的时间。<br />#include <iostream>#include <cstring>using namespace std;#define da

2011-04-26 17:26:00 559

原创 【POJ1160】Post Office(动态规划 DP)

<br /><br />题目给出一条直线上的m个村庄及其距离,给出n个邮局,要求怎么建n个邮局使代价最小。<br />思路:用opt[i][j]记录把前i个邮局建到前j个村庄中的最优解,用cost[i][j]记录所有在i到j村庄中,建1个邮局的最小代价。显然邮局应该设到中点。让前i个邮局覆盖前j个村庄,第i+1个邮局覆盖第j+1至j+k个村庄(j+k<=n),则状态转移方程为<br />res[i+1][j+k]=min{res[i][j]+cost[j+1][j+k];} (k+j<=n)<br />Co

2011-04-26 10:18:00 672

原创 【POJ1014】Dividing (动态规划,多重背包)

<br /><br />思想:本题是找按价值均分大理石的方案是否存在,由于分配时不能破坏大理石,所以有个显而易见的剪枝:当所有的大理石的总价值为奇数时肯定不能被均分。把问题转化一下即:由一个人能否从原大理石堆中取出总价值为原来一半的大理石,本题的主要算法是动态规划,数组flag代表状态,设总价值为sum.当flag[k]==true时,说明,可以有一人获得价值k,另外一人获得价值V-k的大理石分配方案。反之若flag[k]=false说明这种分配方案不存在.我们的任务就是计算出flag[sum/2]是tru

2011-04-25 15:23:00 756

原创 【POJ1050】To the Max (动态规划、最大字串和、最大子矩阵和)||NYOJ44 ||NYOJ104

其实就是最大子段和问题在二维空间上的推广。先说一下一维的情况吧:设有数组a0,a1…an,找除其中连续的子段,使它们的和达到最大。假如对于子段:9 2 -162  temp[i]表示以ai结尾的子段中的最大子段和。在已知temp[i]的情况下,求temp [i+1]的方法是:如果temp[i]>0 temp [i+1]= temp[i]+ai(继续在前一个子段上加上ai),否则temp[i+1]=ai(不加上前面的子段),也就是说 状态转移方程:temp[i] = (temp[i-1]>0?temp[i

2011-04-25 10:20:00 545

原创 【POJ1157】LITTLE SHOP OF FLOWERS (简单动态规划)

<br /> <br /><br />该题也是经典的动态规划,题目叙述的依然很麻烦,其实简化一下就是这样的:例如下面这个例子就是:3表示行,5表示列,然后在下面的3行5列每一行选一个数,使这3个数最大,要求选的数列数必须依次增大,就是从左上方想右下方选3个数使和最大。<br />3 5<br />7 23 -5 -24 16<br />5 21 -4 10 23<br />-215 -4 -20 20<br /> <br />状态转移方程 arr[i][j]=max{arr[i-1][ 0...(j-1

2011-04-25 09:20:00 646

原创 【POJ1887 || 2355 || 1631】Testing the CATCHER(最长递增(递减)子序列)NYOJ224

题目说的很长,但是最后求的就是最长递减子序列。。。好吧 刷水题。。。#include #include #include using namespace std;int arr[100010];int main(){ freopen("1.txt","r",stdin); int n,j,i,num=1; while(scanf("%d",&arr[0])!=EOF){ if(arr[0]==-1) break; int count=0; i=1; w

2011-04-22 16:37:00 647

原创 【POJ3356】AGTC (动态规划dp+最长公共子序列lcs)

<br /><br />一个字符串可以插入、删除、改变到另一个字符串,求改变的最小步骤。和最长公共子序列类似,用二维数组opt[i][j]记录字符串a中的前i个字符到字符串b中的前j个字符匹配所需要的最小步数。假如已知AG到GT的最小步数,AGT到GT的最小步数,AG到GTT的最小步数,求AGT到GTT的最小步数,此时T= =T,这个值是AG到GT的最小步数,AGT到GT的最小步数加一(AGT到GT的最小步数等于AGTT到GTT的最小步数,加一是将T删除的一步),AG到GTT的最小步数加一(AG到GTT的最

2011-04-22 16:04:00 643

原创 【POJ2192】Zipper(动态规划)

<br /><br />这个题目要求判断2个字符串能否组成1个字符串,例如cat和tree能组成tcraete。我们定义一个布尔类型的二维数组 array,array[i][j]表示str1[i]和str2[j]能否组成str[i+j].i=0或者j=0表示空字符串,所以初始化时,array[0][j]表示str1的前j个字符是否和str都匹配。<br />对于str=tcraete:<br /> <br />Null<br />c<br />a<br />t<br />Null<br />1<br />0

2011-04-22 11:23:00 602

原创 【POJ1080】Human Gene Functions(动态规划 最长公共子序列)

<br />//解题思路://和《算法导论》中动态规划章节的LCS(Longest common subsequence 最长公共子序列)所用例子基本是一样的,//都是测两串基因的相似程度,不同之处在于《导论》用LCS表示两基因的相似程度,LCS越长,相似度越大。//本题中用下面的核苷相近程度取值表表示两基因相似程度,各相应核苷对匹配值之和越高,相似程度自然越大。//首先回想LCS的解法,//设两基因串为an,bm//a[i],b[j]分别表示a串的第i个核苷,b串的第j个核苷/

2011-04-22 10:19:00 497

原创 【POJ2250】Compromise (最长公共子序列,DP)

<br />POJ上边一直WA啊,找N久N久,找不到错误,看到的人求教育我啊。、。。。。<br />#include<cstdio>#include <string>#include <iostream>#include <cstring>#include <algorithm>using namespace std;int reslen[301][301];int respos[300][301];string st1[101],st2[101],resst[101];

2011-04-21 14:55:00 468

原创 【POJ2188】Cow Laundry (归并排序,逆序数)

<br />依旧是利用归并模板。。。这里解释下题意:<br />牛们手短,每次只能移动上边或者下边相邻的一根线。<br />输入的数据是第一行是1号挂钩上下分别链接的线的编号,<br />第二行是二号钩上下分别链接的线的编号。<br />……<br />最后你需要你把错乱的线理顺就行了。。。<br />#include<stdio.h>#include<stdlib.h>using namespace std;//归并排序模板typedef int ElementType;int ans

2011-04-21 10:29:00 1207

原创 归并排序模板 && 求逆序数

<br />#include<stdio.h>#include<stdlib.h>//归并排序模板typedef int ElementType;int ans;void Merge(ElementType A[], ElementType TmpArray[], int Lpos, int Rpos, int RightEnd){ int i , LeftEnd, NumElements, TmpPos; LeftEnd = Rpos - 1; TmpPos = Lpo

2011-04-21 09:38:00 515

原创 【poj1458】Common Subsequence || nyoj36 (动态规划)

<br />状态转移方程:<br /><br />if(st1[i]==st2[j])<br />res[i+1][j+1]=res[i][j]+1;<br />else<br />res[i+1][j+1]= res[i][j+1]>res[i+1][j] ?res[i][j+1]:res[i+1][j] ;<br />res[i][j]表示字符串字串st1[0-i],st2[0-j]的公共子序列长度。<br />#include<cstdio>#include <string>#include

2011-04-20 10:55:00 437

原创 【POJ1953】World Cup Noise(动态规划,斐波那契数列)

<br />/*设f[i]表示长度为i的以0结尾的合法队列个数*设g[i]表示长度为i的以1结尾的合法队列个数*显然有*f[i]=f[i-1]+g[i-1]; (1)*g[i]=f[i-1]; (2)*(2)代入(1)即*f[i]=f[i-1]+f[i-2];*最终合法队列总个数为f[n]+g[n]即f[n]+f[n-1]=f[n+1]*即求斐波那契数列的第n+1项*1,2,3,5,8,13,21.............*/#include<cst

2011-04-20 10:31:00 909

原创 【poj2081】Recaman's Sequence (动态规划DP)

<br />#include<cstdio>using namespace std;bool isexist[3012505]={1};int res[500005]={0};int main(){ int temp; for (int m=1;m<=500000;m++) { temp=res[m-1]-m; if((temp)>0 && !isexist[temp]) { isexist[temp]=1; res[m]=res[m-1]-

2011-04-20 09:39:00 493

原创 【poj1579】Function Run Fun (动态规划DP递归,记忆化递归)

<br />#include<cstdio>using namespace std;int arr[21][21][21];int fun(int a,int b,int c){ if(a<=0||b<=0||c<=0) return 1; if(a>20||b>20||c>20) return arr[20][20][20]; if(arr[a][b][c]!=0) return arr[a][b][c]; if(a<b && b<c) return arr[a][

2011-04-20 08:59:00 634

转载 【POJ 3280】 Cheapest Palindrome(动态规划 回文串)

<br /> <br />    题意:现在有一个由n个字符组成的长度为m的字符串,可以对其通过增加字符或者删除字符来使其变成回文字符串,而增加或者删除字符都有一个花费,求解使该字符串变成回文所进行操作的最小花费.<br />    用dp[start][end]表示使字符串ss[being]……ss[end]变成回文字符串所需的最小花费,只需考虑开始位置和结束位置即可.<br />       1> 如果ss[begin]!=ss[end],那么有四种操作可以使其变成回文:<br />          

2011-04-19 11:13:00 593

转载 背包问题全集

<br />有名的背包九讲,YM各种总结性文章,转来留念。<br />前人V5,后人奋进~!===P01: 01背包问题<br />题目<br />有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。<br />基本思路<br />这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。<br />用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:<br />f[i][v

2011-04-14 10:27:00 529

原创 【POJ2528】Mayor's posters ||【NYOJ9】 (线段树)

<br />北大poj这题测试数据有错,离散化错误,请到这里提交http://acm.nyist.net/JudgeOnline/problem.php?pid=9测试你的程序。<br /> <br />代码注释比较详细,不再赘述<br /> /*为大家方便明白,注释比较多。该题可学会线段树简单用法,学会数据的离散化,还是一个不错的题。*/#include<iostream>#include<algorithm>using namespace std;#define maxnum 20005

2011-04-12 09:27:00 549

原创 【POJ1067】取石子游戏 ||【NYOJ161】(威佐夫博奕(Wythoff Game))

<br /> <br />威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同<br />时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。<br />这种情况下是颇为复杂的。我们用(ak,bk)(ak ≤ bk ,k=0,1,2,…,n)表示<br />两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们<br />称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,<br />10)、(8

2011-04-11 17:07:00 1050

原创 【POJ1704】Georgia and Bob (staircase Nem 变形题)

<br />poj的discuss里边说的题解十分到位:<br /> 这道题目可以对应一个Staircase NIM问题,只需要把两个棋子之间的间隔以及第一个棋子与左边界的间隔看作一堆石子,则一次操作一定是从一对石子中取出若干移到右边相邻的一堆中。这就是标准的Staircase-NIM问题。具体的做法是:将所有奇数位置上的石子个数做XOR,结果为0说明BOB胜,否则说明GEORGIA胜,Not Sure显然是不会出现的。分析:如果只考虑奇数位上,把奇数位上的硬币放入偶数位,看做nim的取石子游戏。那么这是我

2011-04-11 16:58:00 1123

原创 【POJ2975】Nim (博弈)

<br /><br />n堆石子,然后问如果必胜的话有多少种移动方法(一步)。<br />因为答案最多只有n,令ans=a1^a2^...^an,如果需要构造出异或值为0的数,<br />而且由于只能操作一堆石子,所以对于某堆石子ai,现在对于ans^ai,就是除了ai以外其他的石子<br />的异或值,如果ans^ai<=ai,那么对于ai的话,是可以减小到ans^ai的值,然后使得所有数<br />的异或值为0,也即转移到了必败态。<br />#include<cstdio>using namesp

2011-04-11 15:39:00 813

原创 博弈论总结

以下是我从网上收集的关于组合博弈的资料汇总:有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。   显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一

2011-04-11 15:24:00 731

原创 【HDU1536】S-Nim (博弈,SG函数)

<br />#include<cstdio> #include<algorithm> using namespace std; #define N 100+10 int knum,mnum,lnum; int ans[N],si[N],hi[N],sg[10010]; int mex(int x)//求x的sg值(可作为模版应用){ if(sg[x]!=-1) return sg[x]; bool vis[N]; memset(vis,false,

2011-04-11 15:17:00 1641

原创 【HDU1097】John

有SJ 定理:对于任意的一个 Anti-SG 游戏,如果我们规定当局面中所有单一游戏的 SG 值为 0 时游戏结束,则先手必胜当且仅当以下两个条件满足任意一个:(1)游戏的 SG 函数不为 0,且游戏中某个单一游戏的 SG 函数大于1。(2)游戏的 SG 函数为 0,且游戏中没有单一游戏的 SG 函数大于 1。需要特殊处理若干1的情况,奇数个1是必败态, 偶数个1是必胜态. 这与正常的Nim不一致.若只有一堆的个数大于1, 那么现在可以控制全场的1个数的奇偶性, 所以是必胜的. 这与

2011-04-11 10:38:00 697

原创 【poj2348】Euclid's Game

<br />  给两堆石子(题目中是数,配合一下上文这里说石子),两人依次取石子,规则是:每次从石子数较多的那堆取(两堆石子数目相等时任选一堆),取的数目只能为石子少的那一堆的正整数倍。最后取完一堆石子者胜。问给定情况下先手胜负情况。 确实很像欧几里得,一看就想到递归了,似乎递归也不会太难,但是多列几项就会发现一个熟悉的身影:斐波拉契数列。最后的结论是如果两个数相等,或者两数之比大于斐波拉契数列相邻两项之比的极限(),则先手胜,否则后手胜。当然这道题也能用欧几里得来做,不过相比这个就麻烦不少#inc

2011-04-11 09:51:00 802

原创 [POJ1082]Calendar Game & HDU1079 Calendar Game

<br /><br /><br />解题思路<br /> <br />博弈论题目可以用寻找必败状态的方法解决。<br /> <br />第一个必败状态是2001.11.04。由此可以推出其他任何时间的状态。对于除2001.11.04外的其他任何时间,present状态是由能移动到的下两个next状态决定的(当然有些时间只有一个next状态),比如1924.12.19的状态是由1924.12.20和1925.01.19两个状态决定。如果两个next状态中有一个必败状态,则present状态为必胜状态;如果两个

2011-04-11 09:15:00 813

原创 NYOJ137 取石子(三) ([PKU][POJ][1740][A New Stone Game楼教主真男人8题)

<br />http://acm.nyist.net/JudgeOnline/problem.php?pid=137<br />#include <cstdio>#include <cstring>using namespace std;/* N先手胜局 P后手胜局 剩一堆石头这N局面; 剩两堆石头 1、(a,b) a<b;则可以换成(a,a)形式,跟随后手拿法即可胜利,即N局面; 2、(a,a) 与上相反,P局面; 剩三堆石头(a,b,c) 先手总能转化生(

2011-04-08 23:38:00 1473

转载 位运算简介及实用技巧

<br /> <br />持续搬运matrix67的第三篇文章,这篇是真的长见识了。。。orz。<br />前人V5 后人奋进!!!!有木有~<br />===================   <br /> <br />     去年年底写的关于位运算的日志是这个Blog里少数大受欢迎的文章之一,很多人都希望我能不断完善那篇文章。后来我看到了不少其它的资料,学习到了更多关于位运算的知识,有了重新整理位运算技巧的想法。从今天起我就开始写这一系列位运算讲解文章,与其说是原来那篇文章的follow-up,不如

2011-04-07 22:55:00 2191

转载 《数据结构与算法分析》5000字缩写

好吧,这是搬运Matrix67的第二篇博文了……搬运理由嘛……同前一篇。。。所谓温故而知新,老知识看看神牛写的同样能学到新知识。持续的:前人V5,后人奋进啊啊啊啊啊===================================    4月7日买起来看,前几天才看完。这可以说明很多问题,比如,学习很紧张,没有时间;书本身很好,很有看头;看书看得很细心,很有耐心。    打算大致写一下书里的内容。    Data Structures andAlgorithm Analysis in C, Seco

2011-04-07 09:56:00 1008

原创 十种排序算法介绍(转自Matrix67经过本人一些整理和删改)

<br /> <br />虽然已经对排序算法很熟悉了,但是看到这篇日志还是忍不住花了2个钟头自习读了读并作出一些删改。。。十分佩服作者Matrix67的耐心仔细的全面讲解,详细周到。转来留念,造福后人。<br />前人V5,后人奋进!!!<br /> <br />下边为改后内容(原作在最后添上连接)--------------------------------------------------------------------------<br />因为排序算法是最基础的算法,介绍算法时从各种排序算法

2011-04-06 23:53:00 1301

原创 NYOJ129 树的判定 || POJ1308 Is It A Tree? 【并查集应用,树的定义】

<br />http://acm.nyist.net/JudgeOnline/problem.php?pid=129<br />一个有向图入度为1的节点仅有一个,并且无环,则是一颗树。<br />#include<cstdio>#include <cstring>using namespace std;const int MAXSIZE = 10002; int pre[MAXSIZE]; //根节点i,pre[i] = -num,其中num是该树的节点数目; //非根节点j,pre

2011-04-06 22:18:00 623

原创 NYOJ110 剑客决斗 【动态规划DP】

 描述在路易十三和红衣主教黎塞留当权的时代,发生了一场决斗。n个人站成一个圈,依次抽签。抽中的人和他右边的人决斗,负者出圈。这场决斗的最终结果关键取决于决斗的顺序。现书籍任意两决斗中谁能胜出的信息,但“A赢了B”这种关系没有传递性。例如,A比B强,B比C强,C比A强。如果A和B先决斗,C最终会赢,但如果B和C决斗在先,则最后A会赢。显然,他们三人中的第一场决斗直接影响最终结果。假设现在n个人围成一个圈,按顺序编上编号1~n。一共进行n-1场决斗。第一场,其中一人(设i号)和他右边的人(即i+1号,若i=n,

2011-04-06 19:27:00 2136

软考高级程序员chm 真题

软考 高级 程序员 chm 必备软考高级程序员chm 真题 软考必备手册

2010-09-16

软考中级程序员chm真题

软考中级程序员chm真题,十分强大,备考必备。软考 中级 程序员

2010-09-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除