题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1030 题目大意: 给定两个字符串的长度和内容,求最长公共子序列. 题目思路: [动态规划] 求最长公共子序列.f[i][j]表示第一个串匹配到i,第二个串匹配到j的最长长度. // //by coolxxx // #include<iostream> #include<algorithm> #include<string> #include<ioman…
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1033 http://poj.org/problem?id=1141 ZOJ目前挂了. 题目大意: 给一个括号序列,要求输出,最少增加括号数情况下,任意一个合法括号序列即可. 匹配是指()和[]完全合法,可以嵌套. 题目思路: [动态规划] 区间DP,枚举左右区间端点,两种匹配方法:中间拆开匹配或者直接头尾匹配. 转移得到最优值,同时记录得到最优值的方法,最后逆推得到不用增加的括号位置…
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1041 题目大意: 一个二维平面,上面n(n<=1 000 000)个点.问至少选多少个点才能完全包含所有的点. 包含是指xy坐标均不大于. 题目思路: [最长下降子序列][动态规划][二分] 这题n有107,所以用二分做最长下降子序列. 首先将所有点按x坐标或者y坐标排序,保证一维的单调性. 之后在剩余一维的数中求最长严格下降子序列即可. (如果下一个点是上升的那么可以放弃当前的点转…
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1032 题目大意: 一个物品在2条生产线上加工,每条线上n(n<=1000)个节点,加工耗时为Ai,j(i=1,2;j=1 2....n) 从其中一个节点转移到另一条生产线相同节点位置需要耗时Ti,j(i=1,2;j=1 2....n) 放上生产线和放下生产线还需要e1,e2和x1,x2的时间.求最少加工时间. 题目思路: [动态规划] 动态规划比较明显,f[j][i]表示在第j条生产…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1081 http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1031 题目大意: 给一个n*n(n<=100)的矩阵,求一个矩形覆盖的值最大是多少. 题目思路: [动态规划] 二维的最大字段和.先考虑一维的情况.f[i]=max(f[i-1]+a[i],a[i]) 只要之前的部分和大于零则一起取一定比只取当前位置的要优. 因此只要判断局部段的和是否大于零…
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1029 题目大意: 题同乘法难题.给n+1个数,头尾不能动,中间的数可取出,取出时代价是现在该数和左右的乘积.求最小代价. 题目思路: [动态规划] 区间动规. f[i][j]表示从i到j的最小代价. 枚举区间[i,j]中最后取出的是第k个数,则转移方程为f[i][k]+f[k][j]+a[i]*a[k]*a[j] // //by coolxxx // #include<iostrea…
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1028 题目大意: 求01背包最优解的方案.物件数和物件编号. 题目思路: [动态规划] 经典背包DP. 最后倒推求方案 // //by coolxxx // #include<iostream> #include<algorithm> #include<string> #include<iomanip> #include<memory.h&…
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1583 题目大意: T组数据,对于n(n<=6000)给定序列Xn(Xn<=20000),求一个非递减序列Y1, Y2, ..., Yn,使得绝对值差的和|X1-Y1|+|X2-Y2|+...|Xn-Yn|最小,并输出字典序最小的序列Y. 题目思路: [动态规划] 首先序列Y的数字肯定和X中的某一个数字相等,不然可以通过平移得到相等或更优的解.证明不大会证. 用num[i]表示第i小…
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1588 题目大意: 给n1个0和n2个1,连续的0不超过k1个,连续的1不超过k2个.问序列有几种(对1000000001(109+1)取模) n1,n2<=100 k1,k2<=10 题目思路: [动态规划] 动态规划比较明显. f[i][j][k][0]表示 i个0 j个1 末尾连续k个0的方案数 f[i][j][k][1]表示 i个0 j个1 末尾连续k个1的方案数 根据最后末…
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1560 题目大意: 给定n(n<=200)个任务及每个任务的耗时,问m(m<=200)时间能够获得的最大收益(收益为解决连续任务数的平方的和,具体例子见题目) 题目思路: [动态规划] 设f[i][j]表示前i个任务,当前时间为j的最优值. 枚举第i个任务是前有几个和i连续的任务,状态转移方程很好推. 时间复杂度比O(n3)小很多,大概O(n2)级别. // //by coolxxx…
1605: nc与数列 Time Limit: 2000 MS  Memory Limit: 64 MBSubmit: 84  Solved: 13[Submit][Status][Web Board] Description nc最近很无聊~所以他总是想各种有趣的问题来打发时间.nc在地上写了一些数字,他发现有一些有趣的数列:这些数列是非递减的,且从第三个数开始,数字的大小总是前两个数的和.如著名的Fibonacci数列:1 2 3 5 8 13 ...,或者其他满足条件的数列:2 2 4 6…
1056: 瞌睡 vs 听课 Time Limit: 500 MS  Memory Limit: 64 MBSubmit: 19  Solved: 6[Submit][Status][Web Board] Description 最近TheBeet为了准备校赛的题目,忙得没日没夜的.结果导致睡眠不足,第二天上课打瞌睡. 老师每分钟讲的东西都很重要,打瞌睡的话肯定会漏掉老师讲的很多内容.好在TheBeet事先看过书,知道这节课大致会讲什么内容,他知道老师第i分钟讲的内容量为Vi.现在TheBeet…
转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC这项赛事是在大三上的算法课上张老师提到的,当时我们学校的组织参加这项活动才刚刚起步,我也没太在意,总觉得那是非常遥远的事,事实上当时我也从未相当如今我们能获得现在的成绩.真正踏入ACM/ICPC这个神奇的世界,不得不提到2004那一年我们学校的参赛队伍xmutank,正是听了pipo师兄的精彩演讲以…
这又是个题干很搞笑的题目:恶魔把公主囚禁在魔宫的右下角,骑士从魔宫的左上角开始穿越整个魔宫到右下角拯救公主,为了以最快速度拯救公主,骑士每次只能向下或者向右移动一个房间, 每个房间内都有一个整数值,负数表示骑士到当前房间要减少这个生命值,非负数表示骑士到当前房间可以增加这个生命值.骑士的初始生命值是一个正整数,请给出骑士需要的最少的初始生命值. 很明显这是个动态规划的题目,而且这个题目的大体框架很常见,就是对一个二维数组进行遍历同时维护另一个dp二维数组,每个dp的值都是与其左侧和上侧的dp值有…
引言:从斐波那契数列看动态规划 斐波那契数列:Fn = Fn-1 + Fn-2    ( n = 1,2     fib(1) = fib(2) = 1) 练习:使用递归和非递归的方法来求解斐波那契数列的第 n 项 代码如下: # _*_coding:utf-8_*_ def fibnacci(n): if n == 1 or n == 2: return 1 else: return fibnacci(n - 1) + fibnacci(n - 2) # 写这个是我们会发现计算f(5) 要算两…
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天给大家分享的是LeetCode当中的32题,这是一道Hard难度的题.也是一道经典的字符串处理问题,在接下来的文章当中,我们会详细地解读有关它的三个解法. 希望大家不要被题目上的标记吓到,虽然这题标着难度是Hard,但其实真的不难.我自信你们看完文章之后也一定会这么觉得. 链接 Longest Valid Parentheses 难度 Hard 描述 给定一个只包含左右括号的字符串,返回最长能够组成合法括号的长度 Given a s…
上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的增强学习). 那么如何求解最优策略呢?基本的解法有三种: 动态规划法(dynamic programming methods) 蒙特卡罗方法(Monte Carlo methods) 时间差分法(temporal difference). 动态规划法是其中最基本的算法,也是理解后续算法的基础,因此本…
题目:House Robber You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected a…
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3953  Solved: 1614[Submit][Status][Discuss] Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是生成一篇长度固定且完全随机的文章—— 也就是说,生成的文章中每个字节都是完…
March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处. 前言 本文翻译自TopCoder上的一篇文章: Dynamic Programming: From novice to advanced ,并非严格逐字逐句翻译,其中加入了自己的…
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列. 例如:输入两个字符串 BDCABA 和 ABCBDAB,字符串 BCBA 和 BDAB 都是是它们的最长公共子序列,则输出它们的长度 4,并打印任意一个子序列. (Note: 不要求连续) 判断字符串相似度的方法之一 - LCS 最长公共子序列越长,越相似. Ju…
 //动态规划查找两个字符串最大子串         public static string lcs(string word1, string word2)         {             int max = 0;             int index = 0;             int[,] nums = new int[word1.Length + 1,word2.Length+1];             for (int i = 0; i <= word1.L…
//递归         public static long recurFib(int num)         {             if (num < 2)             {                 return num;             }             else             {                 return recurFib(num - 1) + recurFib(num - 2);             }   …
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与母串保持一致,我们将其称为公共子序列.最长公共子序列(Longest Common Subsequence, LCS),顾名思义,是指在所有的子序列中最长的那一个.子串是要求更严格的一种子序列,要求在母串中连续地出现.在上述例子的中,最长公共子序列为blog(cnblogs, belong),最长公…
[BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地说,他们有P (1 <= P <= 300) 道题目要做. 他们还离开了农场并且象普通人一样找到了工作. 他们的月薪是M (1 <= M <= 1000) 元. 他们的题目是一流的难题,所以他们得找帮手.帮手们不是免费的,但是他们能保证在一个月内作出任何题目.每做一道题需要两比付款,…
http://poj.org/problem?id=1163 The Triangle Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 32923   Accepted: 19514 Description 73 88 1 02 7 4 44 5 2 6 5 (Figure 1) Figure 1 shows a number triangle. Write a program that calculates the hi…
动态规划的解决方法是找到动态转移方程. 题目地址:http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=3&sectionid=2&problemid=4 题目大意:找到一个最多的老鼠序列,使得序列中的老鼠的体重满足递增,相应老鼠的速度满足递 减.即可要求找出老鼠体重递增,速度递减的最长子序列(不需要连续). 思路:动态转移方程的确定,状态f[i]表示前i个老鼠中的最长递减子序列长度,状态转移方程为mouse[i].len…
今天以LIS问题切入动态规划,现在做一些简单的总结. LIS问题: http://www.cnblogs.com/Booble/archive/2010/11/27/1889482.html…
Description Input Output Sample Input - - Sample Output HINT Solution 斜率优化动态规划 首先易得出这样的一个朴素状态转移方程 f[i]=max{f[j]+cal(sum[i]-sum[j])} 其中j<i,且cal(x)=a*x*x+b*x+c 那么设转移方程中的式子为V 若i<j,且V(j)>V(i) 那么,f[j]-f[i]+a*sum[j]^2-a*sum[i]^2+b*(sum[i]-sum[j])>2*…
Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000,000; 1 <= 长 <= 1,000,000). 每块土地的价格是它的面积,但FJ可以同时购买多快土地. 这些土地的价格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换. 如果FJ买一块3x5的地和一块5x3的地,则他需要付5x5=25. FJ希望买下所有的土地,但是他发现分组来买这些…