随笔分类 - 算法_动态规划
摘要:Greatest Common Increasing Subsequence题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1432题目大意:给出两串数字,求他们的最长公共上升子序列(LCIS),并且打印出来。Sample Input151 4 2 5 -124-12 1 2 4Sample Output21 4分析:神奇就神奇在是LIS与LCS的组合令dp[i][j]表示A串的前i个,与B串的前j个,并以B[j]为结尾的LCIS 的长度.状态转移方程: f(A[i]==B[j]) dp[i][j]=max(...
阅读全文
摘要:Chopsticks题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=234题目大意:给定n个筷子的长度,取k+8套筷子,每套有3个,长度分别为A,B,C。要求k+8套筷子中(A-B)^2的和最小,输出这个最小值。分析:题目中筷子长度是非降序排列的,所以最小的两个A和B一定是相邻的。先不考虑筷子C,只要留着就行。 令dp[i][j]表示从 j 个筷子中取 i 套筷子的最优值。 dp[i][j] = min {dp[i][j-1] , dp[i-1][j-1] | (n - j > 3*(k - i))剩下的筷子
阅读全文
摘要:Common SubsequenceTime Limit:2 Seconds Memory Limit:65536 KBA subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = another sequence Z = is a subsequence of X if there exists a strictly increasing sequence of indices of X such that...
阅读全文
摘要:To the MaxTime Limit:2 Seconds Memory Limit:65536 KBProblemGiven a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1 x 1 or greater located within the whole array. The sum of a rectangle is the sum of all the elements in that rectangle. In
阅读全文
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=76题目大意:在一个DNA上,给定许多基因的起始位置和结束位置,求出这条链上最多同时存在多少基因?并依次输出选择基因的序列号。Sample Input6340 500220 470100 300880 943525 556612 7763705 773124 337453 6650Sample Output3 1 5 6 42 3 1分析:有两种思路。1.最长上升子序列+路径打印;2.贪心法1: 1 //dp[i] = max{0,dp[j]}+1,j 6 # inc
阅读全文
摘要:Pieces题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4628题目大意:给定一个字符串s,如果子序列中有回文,可以一步删除掉它,求把整个序列删除所需要的最少步数。比如:axbyczbea 可以一次删除掉abcba 得到xyzeSample Input2aaabbSample Output12分析:这道题目刚出来时居然有超过一半的人AC,是我太弱了吗? 到底不会,先贴出标程,再慢慢消化好了 集合上的动态规划。。。和点集配对很像,这里我先求出所有的回文串,然后dp。 设d[S]表示将集合S中的字母删除需要多少步,结果就是d[(1 2 #...
阅读全文
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=13题目大意:说的是有三种不同的装备,分别是头盔,盔甲,战靴需要运输,每种装备拥有不同的重量,体积,以及防御能力.当三种装备按照一定的数量规定组合成套装时,套装可以发挥处更强的攻击能力.然后有n个运输车,每个车能够运送的重量和体积有限制,现在问如何给这个n个运输车分配运送任务(即每个运输队运多少头盔,多少盔甲,多少战靴) 可以获得总的防御值最大。输入描述:第一行是运输车的数量n。接下来是第1行是每个头盔的重量w1、体积s1、防御能力d1;第2行是每个盔甲的重量w2、体
阅读全文
摘要:11年北京现场赛的题目。概率DP。公式化简起来比较困难。。。。而且就算结果做出来了,没有考虑特殊情况照样会WA到死的。。。。去参加区域赛一定要考虑到各种情况。像概率dp,公式推出来就很容易写出来了。 1 /* 2 HDU 4098 3 题意:有n个人排队等着在官网上激活游戏。Tomato排在第m个。 4 对于队列中的第一个人。有一下情况: 5 1、激活失败,留在队列中等待下一次激活(概率为p1) 6 2、失去连接,出队列,然后排在队列的最后(概率为p2) 7 3、激活成功,离开队列(概率为p3) 8 4、服务器瘫痪,服务器停止激活,所有人都无法激活了。 9 求服务器瘫痪时Tomato在队列中的
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3008题目大意:人有100血和100魔法,每秒增加 t 魔法(不能超过100)。n个技能,每个技能消耗cost[i]魔法值,造成hurt[i]伤害。普通攻击不消耗魔法,每秒1伤害。boss有100血,每秒对人造成q伤害。每秒内,人先攻击,boss后攻击。问最少多少秒杀死boss?Sample Input4 2 2510 520 1030 2876 704 2 2510 520 10 30 2877 700 0 0Sample Output4 My god分析:普通攻击可以看做是魔法消耗为0,伤害为1
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3127题目大意:将一块长x宽y的矩形布料,剪成小的矩形(每个给定的小矩形都对应一个价值),使得所有小矩形产生的价值最大。Sample Input1 2 4 4 2 2 2 3 3 9Sample Output9分析:这题可以可以看做完全背包问题来接。因为:1、每种矩形布可以剪任意多个;2、题目给出的矩形布可以看做背包容量;3、每个矩形布都有一个价值关键在于找到状态转移方程:设dp[i][j]为长为i宽为j的矩形布的最大价值,下面的图一可以看做待剪的布,图二为小布的尺寸对于这个问题可以两种如下剪布方案
阅读全文
摘要:4类典型的动态规划方程如果子问题数目为O(nt),且每个子问题需要依赖于O(ne)个其他子问题,称这个问题为tD/eD的。1D/1D型:定义一个实函数w(i,j)(1<=i<j<=n),已知D[0],状态转移方程为 E[i] =min{D[i]+w(i,j)},0=<i<j,1=<j<=n————最长上升子序列2D/0D型:已知D[i,0]和D[0,j] , 状态转移方程为: E[i,j]=min{D[i-1,j]+xi,D[i,j-1]+yi,D[i-1,j-1]+zi,j}————最长公共子序列2D/1D型:————多源最短路径2D/2D型:———
阅读全文
摘要:String to Palindrome题目大意:给出一个字符串s,现在可以进行3种操作(添加字母,删除字母,替换字母),将其变成回文串,求出最少的操作次数。比如abccda,可以用删除操作,删除b,d两步可变成回文;但如果用替换操作,把b换成d则只需要1步。分析:刚开始我一直考虑它是否具有最优子结构性质,直到现在,还是不明白为什么可以用动态规划来做,大神若是看见,还望指教。 由于添加字母和删除字母的效果是一样的,因此我们这里就只进行删除和替换操作。令dp[i][j]表示从第 i 到第 j 个字母变成回文所需要最少的操作数。 转移方程为:当是s[i]==s[j]时,dp[i][j] = d..
阅读全文
摘要:题目大意:输入一个由小写字母组成的字符串,你的任务是把它划分成尽量少的回文串。比如racecar本身就是回文串;fastcar只能分成7个单字母的回文串;aaadbccb最少可分成3个回文串:aaa、d、bccb。字符串的长度不超过1000。分析:令dp[i]表示从第1个到第 i 个字符所组成的最少回文串数。 我们考虑如果前k个字符构成了1个回文,那么前k+1个字符最多构成2个回文,如果这些字符都相同,那么也只是1个回文串。所以如果第 j 个字母到第 i 个字母能构成回文,那么dp[i] = min(dp[i],dp[j-1]+1);初始条件是:dp[i]=i;代码如下: 1 # inclu.
阅读全文
摘要:Remember the WordNeal is very curious about combinatorial problems, and now here comes a problem about words. Knowing that Ray has a photographic memory and this may not trouble him, Neal gives it to Jiejie.Since Jiejie can't remember numbers clearly, he just uses sticks to help himself. Allowin
阅读全文
摘要:Exploring PyramidsArchaeologists have discovered a new set of hidden caves in one of the Egyptian pyramids. The decryption of ancient hieroglyphs on the walls nearby showed that the caves structure is as follows. There arencaves in a pyramid, connected by narrow passages, one of the caves is connect
阅读全文
摘要:Problem BThe Twin TowersInput:standard inputOutput:standard outputOnce upon a time, in an ancient Empire, there were two towers of dissimilar shapes in two different cities. The towers were built by putting circular tiles one upon another. Each of the tiles was of the same height and had integral ra
阅读全文
摘要:打印路径时需要引进一个数组b进行递归打印在LCS中,如果是公共子节点,则标记为1,如果不是,标记为2、3,分别表示往上递归或者往左递归对于样例:/*输入ABCBDABBDCABA*/数组c中各值为: 数组b中各值为: # include# include# define maxn 105# define max(a,b) a>b?a:bint c[maxn][maxn],b[maxn][maxn],m,n;char x[maxn],y[maxn];void lcs(int i,int j){ if ...
阅读全文
摘要:0-1背包 • 给定n种物品和一背包,物品i的重量是wi,其价值是pi,背包的容量是M,问如何选择装入背包中的物品总价值最大? 背包的背负有上限,因此在这个上限内尽可能多的装东西,并且价值越多越好 • 0-1背包问题的解决办法 穷举算法 动态规划算法 贪心算法(未必获得最优解) 回溯算法 •动态规划
阅读全文
摘要:最大连续子段和 • 给定长度为n的整数序列,a[1...n], 求[1,n]某个子区间[i,j]使得a[i]+…+a[j]和最大,或者求出最大的这个和。例如(-2,11,-4,13,-5,2)的最大子段和为20,所求子区间为[2,4]。 • 穷举法(3次for循环) 第1次for循环,遍历数组所有数
阅读全文
摘要:最长公共子序列 • 若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。 例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应
阅读全文