2013年3月23日

poj1732

摘要: 题目大意:给你一个a..z与数字的对应表及一些单词 再给你一个目标串数字串。。问你最少用那些单词可以拼成数字串。。思路:dp f[i]表示前i个最少用几个单词拼成 f[i]= f[i - len[k]] + 1 (第k个单词对应数字正好相符) 1 /* 2 State:Accepted 3 Time:2013-03-10 14:35:57 4 */ 5 #include <cstring> 6 #include <string> 7 #include <fstream> 8 #include <cstdlib> 9 #include <cs 阅读全文
posted @ 2013-03-23 23:49 yzcstc 阅读(172) 评论(0) 推荐(0) 编辑

poj1726

摘要: 黑书上的题目的加强版思路差不多。。这届看黑书p117例题4 ”舞蹈家“怀特先生 1 /* 2 State:Accepted 3 Time:2013-03-10 02:44:14 4 */ 5 #include <iostream> 6 #include <cstring> 7 #include <string> 8 #include <cstdlib> 9 #include <cstdio> 10 #include <algorithm> 11 #include <cmath> 12 const int num 阅读全文
posted @ 2013-03-23 23:40 yzcstc 阅读(261) 评论(0) 推荐(0) 编辑

poj1722

摘要: 题意:给定n个数,每次可对一相邻的数进行合并,合并的操作为a[i] -a[i+1] 操作完形成n-1数,在进行同样操作,最后只剩下一个数。。为给定的值。。 求如何操作。。思路:dp 因为只能用-号,而减完得数等下再减去他,--就为+了。。 这样实质就是往里面添加+ 或-。。 就变成了背包问题了。。 1 /* 2 State:Accepted 3 Time:2013-03-10 02:03:30 4 */ 5 #include <iostream> 6 #include <fstream> 7 #include <cstring> 8 #include < 阅读全文
posted @ 2013-03-23 23:35 yzcstc 阅读(226) 评论(0) 推荐(0) 编辑

poj1704

摘要: 题目意思:给定若干个棋子的位置,每次可以向左移动一个棋子几个位置,最终无法移动者输。。思路:博弈论题目。。 第一次做到这种题目,没什么思路。。参考这位大 神http://www.cnblogs.com/rainydays/archive/2011/09/29/2195649.html 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 using namespace st 阅读全文
posted @ 2013-03-23 23:27 yzcstc 阅读(122) 评论(0) 推荐(0) 编辑

poj1699

摘要: 题目:给你一些序列,要求进行合并合并完最短。eg,AGCT与CTAA 可以合并成AGCTAA(CT相同)思路:先进行预处理,处理出i串与j串合并完的程度。。 然后进行dp或者记忆化搜索 因为n很小,所以我们可以进行状态压缩 用一个 <2^10的数来表示该字符串连接了没,所以 f[i][j]表示此时状态为J,最后一个放的是第I个的最短长度 f[i][j] = f[k][j + (1 <<k - 1)]+s[k] - len[i][k] ( i放过且k没放过,len[i][k],表示k接在相同字母数 ) 1 、* 2 State:Accepted 3 Ti... 阅读全文
posted @ 2013-03-23 23:21 yzcstc 阅读(209) 评论(0) 推荐(0) 编辑

poj1682

摘要: 题目大意:在三个河岸X,Y,Z上分别有n,m,k个部落,要求用最少的费用,使每个部落都能通过至少一座桥与其它河岸联系. 期中桥梁不能交叉.每条桥梁需要的费用为两个部落海拔差的绝对值.思路:两两进行dp。。然后枚举交点在进行dp一次。。 即多重dp 1 /* 2 State:Accepted 3 Time:2013-03-08 20:49:50 4 */ 5 #include <iostream> 6 #include <fstream> 7 #include <cstdio> 8 #include <cstdlib> 9 #include < 阅读全文
posted @ 2013-03-23 21:45 yzcstc 阅读(174) 评论(0) 推荐(0) 编辑

poj1671

摘要: 题意:一首n行诗,每一行有一种韵律,问这首诗总共可能有多少种韵律排列。思路:dp or 递推 f[i][j]表示前i个位置,用j种韵律的方案数 f[i][j] = f[i-1][j]*j + f[i-1][j-1] {其实挺好理解的,如果没出现新的韵律,那么就用前面的j种任意一种韵律来填充,否则就新引入一种韵律} 1 /* 2 State:Accpeted 3 Time:2013-03-07 22:02:23 4 */ 5 #include <iostream> 6 #include <cstring> 7 #include <string> 8 #incl 阅读全文
posted @ 2013-03-23 21:41 yzcstc 阅读(203) 评论(0) 推荐(0) 编辑

poj1636

摘要: 题目大意:给出两侧分别有m个节点的图,边不可能存在于同一侧的点之间.从左和右侧分别挑出数量相等且不大于m/2个一些点,进行交换,使换完后不存在同一侧的边。求最大交换点的数。。思路:进行联通二分图染色。。颜色相同的点必须同时交换。。不然就有边处于同一测。。 然后dp f[i][j]表示一个交换i个,一个个交换j个是否可行 f[i][j] =f[i - vx[k]][j - vy[k]]|| f[i-vy[k]][j - vx[k]]; vx[k],vy[k]表示联通块的相同颜色的个数 1 /* 2 Time:2013-03-07 00:50:09 3 State:Accep... 阅读全文
posted @ 2013-03-23 21:15 yzcstc 阅读(358) 评论(0) 推荐(0) 编辑

poj1635

摘要: 题目大意:给出两串含有‘1’和‘0’的字符串,0表示向下搜索,1表示回溯,这样深搜一颗树深搜完之后问这两棵树是不是同一棵树。。思路:本题为最小树表示法。。类似dp的思想实现。。 当1和0的个数相等时,这个序列便是一颗子树。。 每次搜到一个子树,我们便对子树进行大小排序。。 每层都这样操作。。 那么最后的序列便是树的最小表示法。。因为其是唯一的。。 两串如果相等便是同一颗数。。 1 /* 2 Time:2013.03.06 00:19:55 3 State:Accepted 4 */ 5 #include <iostream> 6 #include <cstring> . 阅读全文
posted @ 2013-03-23 21:01 yzcstc 阅读(265) 评论(0) 推荐(0) 编辑

poj1276

摘要: 题意:给你一堆钱,有许多面值,每种若干张,请找出利用这些钱可以凑成的最接近且小于给定的数字的数额。。思路:多重背包。。。 1 /* 2 State:Accepted 3 Time:2013.3.3 4 */ 5 #include <iostream> 6 #include <cstring> 7 #include <string> 8 #include <cstdlib> 9 #include <cstdio>10 #include <cmath>11 #include <algorithm>12 #inclu 阅读全文
posted @ 2013-03-23 20:50 yzcstc 阅读(167) 评论(0) 推荐(0) 编辑

poj2411

摘要: 题意:题意:给定一个长宽小于等于11的矩形,问用1×2的小矩形填满,有多少种方法。思路:经典的状态压缩题目 用2进制表示状态 f[i][opt]表是第i行状态为opt时的方法数 f[i][opt] = sigma(f[i-1][opt1])期中opt1如果当前位上没放,那么opt就必须放一个竖的。。。 答案为sigma(f[n][i]) 1 /* 2 STATE:ACCEPTED 3 TIME:2013.3.3 4 */ 5 #include <iostream> 6 #include <cstring> 7 #include <string> 8 阅读全文
posted @ 2013-03-23 20:45 yzcstc 阅读(304) 评论(0) 推荐(0) 编辑

poj1260

摘要: 思路:dp f[i][j]表示前i个总共买了j个总共要付的最小费用。。。 f[i][j] = min(f[i -1][k] + (j-k+10)*value[i]); k<=sum[i-1] 1 /* 2 State:Accepted 3 Time:2013.3.2 4 */ 5 6 #include <iostream> 7 #include <cstring> 8 #include <string> 9 #include <fstream>10 #include <cstdlib>11 #include <cstdio 阅读全文
posted @ 2013-03-23 20:35 yzcstc 阅读(137) 评论(0) 推荐(0) 编辑

poj1221

摘要: 思路:递推or dpf[i][j]表示要分解i且最小数字为j的情况f[i][j] += f[i-2*j][j] (i-2*j>=j),f[i][j] += 1 (i==2*j)初始 f[i][i]=1 1 /* 2 State:Accepted 3 Time:2013.3.2 4 */ 5 #include <iostream> 6 #include <cstring> 7 #include <string> 8 #include <cstdlib> 9 #include <fstream>10 #include <cma 阅读全文
posted @ 2013-03-23 20:23 yzcstc 阅读(143) 评论(0) 推荐(0) 编辑

poj1080

摘要: 题意:给定2个基因串(ACGT),可以往里面添加’-‘(可表示任意字母),使2串长度相同,两串添加完的最大相似度。。思路:dp f[i][j]表示第一串前i个,第二串前j个添加完的最大相似du f[i][j] = max(f[i -1][j-1] + mat(s1[i] , s2[j]), f[i-1][j] +mat('-', s2[j]), f[i][j-1] + mat(s1[i],'-')); mat(char1, char2) 表示两字符的相似度。。 1 /* 2 State:Accepted 3 Time:2013.3.1 4 */ 5 #inclu 阅读全文
posted @ 2013-03-23 20:14 yzcstc 阅读(209) 评论(0) 推荐(0) 编辑

poj1050

摘要: 经典的最大子矩阵和。。转化成最大子段和(通过枚举列的长度,然后对于选定的那一列做一次的最长子段和)最后选取最大就是答案。。 1 /* 2 State:Accepted 3 Time:2013.3.1 4 */ 5 6 #include <iostream> 7 #include <cstdlib> 8 #include <cstdio> 9 #include <cstring>10 #include <algorithm>11 #include <fstream>12 #include <string>13 # 阅读全文
posted @ 2013-03-23 19:58 yzcstc 阅读(243) 评论(0) 推荐(0) 编辑

poj1141

摘要: 题意:定义如下规则序列(字符串): 空序列是规则序列; 如果S是规则序列,那么(S)和[S]也是规则序列; 如果A和B都是规则序列,那么AB也是规则序列。 例如,下面的字符串都是规则序列: (), [], (()), ([]), ()[], ()[()] 这几个则不是规则序列: (, [, ], )(, ([() 现在,给出一些由‘(’,‘)’,‘[’,‘]’构成的序列,请添加尽量少的括号,得到一个规则序列。思路: 黑书上的题目。经典dp f[i][j]表示i..j这一段匹配完所需要添加的最少字母数 方程:f[i][j] = min(f[i... 阅读全文
posted @ 2013-03-23 19:53 yzcstc 阅读(210) 评论(0) 推荐(0) 编辑

poj1042

摘要: 题目大意:john有H个小时,他要去钓鱼。已知有N个池塘,排在一起,池塘间有间隔,从i个池塘走到i+1需要时间ti。john必须从第一个池塘开始,往2-3-4...池塘的顺序钓鱼。每个池塘刚开始每分钟调fi与,往后递减。。。求最多调多少鱼。。我的思路:dp f[i][j]表示前i个池塘用j分钟所能钓到最多的鱼。。 f[i][j] = max(f[i - 1][k] + a[i][j - k - ti]); a[i][j-k-ti] 表示第i个池塘给定j-k-ti分钟所能钓到的鱼、、、 。。输出比较蛋疼。。还有,可知5分钟为一个单位、、先除5再说 1 /* 2 State:Accepted... 阅读全文
posted @ 2013-03-23 19:42 yzcstc 阅读(234) 评论(0) 推荐(0) 编辑

poj1015

摘要: 题目意思:给定N对数,取期中的m对,要求取出sigma(a)与sigma(b)的差最小,如果有多种,输出两者和最大的一种。。。DP求解.f[i,j,k]表示前i对数中选j对,第一个数之和减第二个数之和的差为k,这种情况下第二个数之和的最大值.显然,f[i,j,k]=max(f[i-1,j,k],f[i-1,j-1,k-d[i]+d[i]]+p[i]);;View Code 1 /* 2 State:Accept 3 Time:2013.2.28 4 */ 5 6 #include <iostream> 7 #include <cstdio> 8 #include < 阅读全文
posted @ 2013-03-23 19:11 yzcstc 阅读(178) 评论(0) 推荐(0) 编辑

poj2593

摘要: 同poj2479几乎一致。。http://www.cnblogs.com/yzcstc/archive/2013/03/23/2977529.html 1 /* 2 Author:yzcstc 3 State:Accept 4 Time:2013.2.26 5 */ 6 #include <iostream> 7 #include <cstdlib> 8 #include <cstdio> 9 #include <cmath>10 #include <cstring>11 #include <string>12 #incl 阅读全文
posted @ 2013-03-23 19:00 yzcstc 阅读(135) 评论(0) 推荐(0) 编辑

poj2479

摘要: 最近一阶段写了dp的专题,这是第一题。题目大意:给定一段数,要求你求出两段和最大的。。思路:直接两遍的最大和子序列,前面一遍,后面一遍。。然后加起来。。 1 /* 2 Author:yzcstc 3 Time:2013.2.26 4 State:AC 5 */ 6 #include <iostream> 7 #include <cstdlib> 8 #include <cstdio> 9 #include <cmath>10 #include <cstring>11 #include <string>12 #include 阅读全文
posted @ 2013-03-23 18:56 yzcstc 阅读(295) 评论(0) 推荐(0) 编辑