
递推
文章平均质量分 52
chen_minghui
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
uva 1347 tour
题意:一飞行员从最左端的某点一直往右边移动,到了最右端又返回到最左端,要求除了最左最右两端点可以重复外,其余点只经过一次,求最短路径,每一个点以坐标形式给出(从左到右),距离为他们间的欧几里得距离的平方。 #include #include #include #define Min(a,b) a<b?a:b using namespace std; const int maxn = 1010;原创 2017-03-24 08:13:09 · 320 阅读 · 0 评论 -
HDU 2196 Computer 树形dp
题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=2196题意给定一颗树,求出每个点到树上任一点的最大距离。 dp[u][0] 和dp[u][1]分别表示u在以u为根结点的子树中,u能走到的最大距离和次大距离 dp[u][2] 表示u往其父节点走能走到的最大距离#include<cstdio> #include<iostream> #incl原创 2017-10-10 15:02:51 · 195 阅读 · 0 评论 -
51nod 1031 骨牌覆盖 斐波那契数列
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1031 思路:没次增加时要么是最后添加竖的一块,要么是横的一块,宽度占掉2,可以从之前的状态转换过来#include<cstdio> #include<queue> #include<iostream> #include<vector> #include<map原创 2017-08-07 22:52:11 · 284 阅读 · 0 评论 -
51nod 1007 正整数分组 01背包
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1007 思路:先求出总和,然后用总和的一半作背包体积,看全部数能够装多少。然后拿总和减去已装的,得到另一半有多少。#include<cstdio> #include<queue> #include<iostream> #include<vector> #incl原创 2017-08-07 22:49:28 · 295 阅读 · 0 评论 -
zoj 3747 Attack on Titans 递推 计数dp
题意:给定三种士兵G,R,P,有无限个,要求取出一个排列为n人,要求满足至少m个连续个G士兵,至多k个连续的R士兵,P士兵不作要求。求排列总数,对1000000007取模。 思路:http://blog.youkuaiyun.com/cc_again/article/details/10858813。不是很懂取模什么意思 #include #include #include #define ll long原创 2017-06-15 19:37:10 · 494 阅读 · 0 评论 -
poj 1159 Common Subsequence LCS模板
题意:给两个串,求出他们LCS的长度 LCS(Longest Common Subsequence)最长公共子序列:一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列 X={x1,x2,x3...xn},Y={y1,y2,y3...ym} ,令Z={z1,z2,z3...zk}是他们的LCS i=1,2,3,4.原创 2017-05-12 22:01:56 · 360 阅读 · 0 评论 -
hdu poj 1080 Human Gene Functions LCS 动态规划
题意:给定两DNA序列,在序列中任意位置可以插入-和另外一个碱基匹配,每种匹配有个分值,求匹配的最大分值 思路:用dp[I][j]代表放a中第I个,与放b中第j个字符时的最大分值。 什么都不放dp[0][0]=0 在a前面加上与b长度相同的‘-’,与b全部匹配 dp[0][I]=dp[0][I-1]+map[4][a[I-1] (1= 在b前面加上与a长度相同的'-',与a全部匹配原创 2017-04-19 20:29:30 · 299 阅读 · 0 评论 -
uva624 CD 01背包+输出路径
题意:将CD中的歌曲复制到胶卷中,胶卷最多容纳N分钟,给出CD中歌曲的数量和每一首歌的持续时间 体积和价值贡献一样大的01背包 路径输出:在选择第I件物品是从前I-1个物品这个子问题推出来的,如果f[I][j]>f[I-1][j]说明是选择了第I件物品,用一个数字path[I]记录 #include #include using namespace std; int f[21][2100];原创 2016-10-17 23:04:30 · 455 阅读 · 0 评论 -
POJ3624 Charm Bracelet 01背包模板(一维)
简单得01背包问题,题目得数据量大,二维数组表示爆内存 #include using namespace std; const int V=12881; const int N=3403; int w[N]={0},c[N]={0}; int f[V]; void pack(int n,int m) { for(int i=1;i<=n;i++) for(int v=V;v>=0;v--)原创 2016-10-09 18:48:05 · 360 阅读 · 0 评论 -
Codeforces 189A. Cut Ribbon 完全背包
题意:一块长度为n的布条,要求每次切断都必须要含有a,b,c三个长度的两种,问最多可以切多少块 用一维数组表示状态,表示体积的初始条件为第i个物品,除了f[0]用0初始化外,其余的均用无穷小初始化,表示处于未定义的状态 代码不是很理解。 #include #include using namespace std; int main() { int n; int f[4001]; f[0原创 2016-10-19 19:22:30 · 385 阅读 · 0 评论 -
hdu 4489 The King’s Ups and Downs 组合 递推
题意:给定n个个数1~n。要求他们排成一列满足“波浪型”。第一个大于第二个,第二大于第三个,(或者第一个小于第二个,第二个小于第三个。。)也就是相对的高矮高矮。。。或矮高矮高。。依此类推。求排列总方案数 思路:考虑第I个数,加入已经排好I-1个数的序列中,要怎样放第I个数才能使新的序列合法呢?I是大于前I-1所有的数,放到任意位置都是“高”。所以I插入的这个位置前面的一个数必须相对它前面的数是“原创 2017-06-07 21:05:15 · 610 阅读 · 0 评论 -
hdu 2050 折线分割平面 递推
思路:http://blog.youkuaiyun.com/deng_hui_long/article/details/9631163 由 d[1]=2,d[2]=7.再考虑每次引入一条边,区域块的增加量 引入直线尽量多的原则是与所有边相交。 #include #define ll long long ll d[10001]; int main() { d[1]=2; d[2]=7; for(int原创 2017-06-06 22:01:06 · 231 阅读 · 0 评论 -
hdu 2044 一只小蜜蜂... dp
思路:由图可知,用d[I]带表两个点相距为I的方法总数,在n可以走到n+1,n+2两个格子。反过来,在n可以由n-1,和n-2走一步过来。所以f[n]=f[n-1]+f[n-2]. #include #define ll long long ll d[52]; int main() { d[1]=1; d[2]=1;//相距为1 1种方法 d[3]=2;//相距为2 2种方法 for原创 2017-06-06 20:39:08 · 483 阅读 · 0 评论 -
Codeforces 429B B. Working out dp
题意:给n*m的矩阵,每个格子有个数,A从(1,1)出发只能向下或右走,终点为(n,m),B从(n,1)出发只能向上或右走,终点为(1,m)。两个人会在某处相遇,求出除了相遇点外,他们两个路径之和的最大值(相遇点不算作距离) 思路: dp0[I][j]表示从左上角走到(I,j)的最大距离 dp1[I][j]表示从左下角走到(I,j)的最大距离 dp2[I][j]表示从右上角走到(I,j)的原创 2017-06-05 20:38:53 · 326 阅读 · 0 评论