动态规划
laziercs
这个作者很懒,什么都没留下…
展开
-
hdu 1514-Free Candies
/*http://acm.hdu.edu.cn/showproblem.php?pid=1514题意是给4堆(堆的高度小于等于40)有颜色(颜色的种类小于等于20)的物品,你有一个篮子最多能装5件物品,每次从这4堆物品里面任取一件物品放进篮子里,但是取每堆物品时,必须先取上面的物品,才能取下面的物品,如果发现篮子里的两种物品的颜色一样,那么把这两种物品拿出来,问最后最多能拿出多原创 2012-08-28 18:48:54 · 1097 阅读 · 0 评论 -
hdu 4328 (悬线法+dp)
悬线法用于求解最大子矩阵问题,资料详见:这篇论文对于red-and-blue crisscross 方阵可以用dp,既可以用合并两个小方阵得到一个大方阵,合并过程如下图: 我们可以把两个绿色的3*3小方阵合成一个4*4大方阵,只要符合color[i][j]!=color[i-1][j]&&color[i][j]!=color[i][j-1]&&color[i][j]==color[原创 2013-07-02 14:10:46 · 946 阅读 · 0 评论 -
acdream 数树专题--完美数(数位dp)
/* 题目:完美数 题目链接:http://www.acdream.net/problem.php?id=1083 题目描述:在[L , R] 的正整数区间内,要么包含3 要么包含 8 的不同的整数有多少个? 解题思路:数位dp; 这题主要求出[0,n]区间内有多少个这样的数; 则[L,r]=[0,r]-[0,l-1]; 先求出每位数以内有多少这样的数,比原创 2013-03-17 13:25:06 · 893 阅读 · 0 评论 -
hdu-3507-Print Article
/*第一次弄斜率dp,发现它真的很强大,和用线型单调队列来优化dp思路差不多;这里也是维持一个单调的斜率队列,保证每个点最多只进队一次;时间复杂对由然来的o(n×n)降到了o(n);主要是要弄出当G(i,j)*/ #include#include__int64 dp[510000],sum[510000];__int64 G(int i,int j){return原创 2012-08-29 17:00:42 · 369 阅读 · 0 评论 -
LCIS(最长公共上升子序列)的O(nm)算法 (转)
(转至 matrix67.com) 这里要说的这个算法利用了nlogn的最长上升子序列(LIS)的技巧:用f[k]表示长度为k的上升子序列最后一个数最小是多少。 在最长公共上升子序列中,令f[i,j][k]表示A串前i个数字,B串前j个数字,长度为k的公共上升子序列中,最后一个数最小是多少。 当A[i]=B[j]时,像nlogn的最长上升子序列一样把转载 2012-10-14 12:37:16 · 1574 阅读 · 0 评论 -
hdu 4293
//一个dp的题,时间复杂n*n;//把1到n看成一个区间;先把一定不可能的去掉(比如前面加后面的人数大于n+1),再把同一组的人并在一起(所谓同一组的人,就是说法一样的人),如果同样说法的人的个数超过这组的区间长度,去掉超过的,因为这组中说的正确人数的最大值是这组的总人数;//然后只要保证区间不重叠就加在一起,也就是dp的状态转移:dp[i]=v[i]+Max(dp[j])(1//最原创 2012-09-21 14:07:07 · 514 阅读 · 0 评论 -
uva-12484-cards
//http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3928//解题思路:一个dp题,有用到滚动数组来优化空间,时间复杂度n*n,状态转移方程如下://rang[i][j]= max(sum(i+1,j)-rang[i+1][j]+val[i],原创 2012-09-20 08:49:24 · 736 阅读 · 0 评论 -
uva 12486-Space Elevator
//http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3930//Problem description:Space ElevatorChina is building a space elevator, which will allow the原创 2012-09-19 22:10:54 · 736 阅读 · 0 评论 -
hdu-4281
//一个mtsp模型题,以前只弄过tsp,第一次弄mtsp,大牛的解题报告让我受益匪浅,mtsp问题主要就是对一个mtsp分解成多个单tsp组合,并使组合后取得的值是一个最值; //代码如下: #include#include#include#define inf 10000000struct node{ int pre,sum,id;}list[200原创 2012-09-11 22:18:18 · 616 阅读 · 0 评论 -
hdu-4283
//看了大牛的报告才知道这题的思路,dp水平不够呀,努力,努力!;//这题的主要思想是,在当前区间内,当s点上舞台时,前面已有i-s个人上过舞台了,最后枚举i取最小值并记忆化就可以了; #include#includeint dp[110][110][110];int num[110];int Min(int a,int b){return a<b?a:b;}int原创 2012-09-11 16:52:40 · 842 阅读 · 0 评论 -
2012 ACM/ICPC Asia Regional Changchun Online-1010
//一个经典的树形背包,直接用剩余的时间对除主干路之外的其他路进行背包就可以了//代码如下: #include#include#define N 510struct edge{ int to,c,next;}edge[N*2];int n,t,num[N],head[N],ant;void add(int a,int b,int c){原创 2012-09-08 19:01:28 · 593 阅读 · 0 评论 -
hdu 湫秋系列故事——安排座位(组合dp)
/* * 以前比赛的时候做这题,一点思路都没有,后面就放了放; * * 今天突然想来弄下这题,于是去拜访了大牛的博客,了解到了组合dp的解法 * * 解法如下: 首先我们令F[i][j]表示前i个系的所有学生坐在座位上,出现了j对相邻学生是同一个系的 * * 那么对于接下来一个系的a个学生,我们可以把这个系的学生插入前面出现的j对相邻学生的中间,从而使他们变得不相原创 2013-07-22 16:29:15 · 1105 阅读 · 0 评论