动态规划
文章平均质量分 50
shiyicode
已弃用! 可以通过shiyi@threebody.xyz联系我
展开
-
[kuangbin带你飞]专题十二 基础DP1 G - 免费馅饼(HDU 1176)
思路很基本的dp,由于初始状态只能在位置5,所以可以倒着dp,即从时间T到0。状态转移方程 v[i][j] = max(v[i+1][j+1], v[i][j+1], v[i-1][j+1]) / i为当前位置/ j为当前时间/ v[i][j]为接到的馅饼量v[0][5]便为最终结果原创 2015-11-29 17:15:28 · 898 阅读 · 0 评论 -
POJ 3252 Round Numbers(数位dp&记忆化搜索)
题目链接:[kuangbin带你飞]专题十五 数位DP E - Round Numbers题意 给定区间,求转化为二进制后其中0比1多或相等的数字的个数。思路 将数字转化为二进制进行数位dp,因为一个二进制数的最高位必须为1,所以设置变量first记录前面位是否有1,若有1,则可任意放,否则,只可放1。 同时,上面的判断决定了搜索时len的大小与二进制本身的长度不一定相等,所以需两个原创 2016-02-14 23:25:10 · 1842 阅读 · 0 评论 -
51Nod 1405 树的距离之和(dp)
1405 树的距离之和基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注给定一棵无根树,假设它有n个节点,节点编号从1到n, 求任意两点之间的距离(最短路径)之和。思路: 首先,任选一个节点,设定为树的根。 用num[x]表示以节点x为根的子树的节点总数(包含x自身) 假如设定节点1为根,则先求出dp[1],表示所有节点到节点1的距离之和, 对根而言也是所有节点的深度之和。 若x是y的子结点,则有 dp[x] = dp[y] +原创 2016-02-01 21:05:14 · 2399 阅读 · 1 评论 -
UVA - 1252 Twenty Questions(状态压缩&记忆化搜索)
题目链接:UVA - 1252 Twenty Questions题意 有n(0思路 从m的数据范围以及题意,很容易可以想到状态压缩,用二进制位来表示集合。 dp(i, j) = c i表示已经询问过的特征的集合 j表示已经确定我选的物体具有的特征的集合 那么显然的,j一定是i的子集。 c表示当前状态还需询问的次数dp(i, j) = 1 + min(原创 2016-03-02 22:34:12 · 1274 阅读 · 0 评论 -
HDU 3652 B-number(数位dp&记忆化搜索)
题目链接:[kuangbin带你飞]专题十五 数位DP G - B-number题意 求1~n的范围里含有13且能被13整除的数字的个数。思路 首先,了解这样一个式子:a%m == ((b%m)*c+d)%m; 式子的正确是显然的,就不证明了。 那么判断数是否可以被13整除就可以分解为一位一位进行处理。 当然,我们也只需要储存取余后的值。 dfs(len, num,原创 2016-02-18 18:19:41 · 5141 阅读 · 2 评论 -
CODEVS 1029 遍历问题
题目链接:1029 遍历问题题意题目描述 Description 我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树: 所有这些二叉树都有着相同的前序遍历和后序遍历原创 2016-03-17 18:26:35 · 1128 阅读 · 0 评论 -
timus 1002. Phone Numbers(KMP&动态规划)
题目链接1002. Phone Numbers题意 现实生活中,你时常会遇到许多许多而且越来越长的电话号码。你需要记住这类型的号码。 例如按下面的图示,把字母划分到特定的数字上,是一种很容易就能把数字记住的方法:1 ij 2 abc 3 def4 gh 5 kl 6 mn7 prs 8 tuv 9 wxy0 oqz 按这种方法:每个字或一个词组可被代替成一原创 2016-03-18 01:54:12 · 1645 阅读 · 0 评论 -
HDU 4507 吉哥系列故事――恨7不成妻(数位dp&好魔性的一道好题)
题目链接:[kuangbin带你飞]专题十五 数位DP J - 吉哥系列故事――恨7不成妻题意Time Limit:500MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uDescription 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨原创 2016-02-24 03:32:56 · 3748 阅读 · 1 评论 -
HDU 3709 Balanced Number(数位dp)
题目链接:[kuangbin带你飞]专题十五 数位DP F - Balanced Number题意 给定区间[a,b],求区间内平衡数的个数。所谓平衡数即有一位做平衡点,左右两边数字的力矩想等。思路 遍历每一位做为平衡点,进行搜索,sum保存数字乘以距离的和,若sum为0,则说明平衡。 要注意因为遍历了len次,所以0多加了len-1次。 还有个小技巧是当sum<0时就可以直接原创 2016-02-24 15:59:08 · 2749 阅读 · 1 评论 -
UVA 10003 Cutting Sticks(区间dp)
题目链接:UVA - 10003 Cutting Sticks题意 给一长度为L的棍子,和n个切割点,每次切割的代价为当前的棍子的长度,问最少的总切割代价是多少。思路 典型的区间dp dp[i][j] = min(dp[i][k]+dp[k][j]+a[j]-a[i]) |i代码递推#include <iostream>#include <algorithm>#include <原创 2016-02-27 16:44:03 · 1055 阅读 · 0 评论 -
UVA - 1218 Perfect Service(树形dp)
题目链接:UVA - 1218 Perfect Service题意 有n台电脑,互相以无根树的方式连接,现要将其中一部分电脑作为服务器,且要求每台电脑必须连接且只能连接一台服务器(不包括作为服务器的电脑),求最少需要多少台电脑作为服务器。思路 典型的树形dp问题,那么我们来建立模型。 d(u,0):u是服务器,孩子是不是服务器均可 d(u,1):u不是服务器,u的父亲是服务器,原创 2016-02-28 23:27:56 · 2577 阅读 · 4 评论 -
POJ 3286 How many 0's?(数位dp)
题目链接:POJ 3286 How many 0’s?题意 输入n,m,求n~m范围内的所有数字中,0出现的总数是多少。思路 用2034做个例子。 枚举0在个十百千位上出现的次数 个:个位为0时,后面不需要考虑,只需考虑前面,因为0比4小,所以前面即使取到最大也不会过限,所以前面可以是1~203(因为当前位是0,所以前面不能是0)。一共203种。 十:十位为0时,前面取1原创 2016-02-29 22:58:34 · 1936 阅读 · 1 评论 -
BZOJ 1833 [ZJOI2010]count 数字计数(数位dp)
题目链接:[kuangbin带你飞]专题十五 数位DP D - Bomb题意 输入n,m,求n~m范围内的所有数字中,分别输出0~9出现的总数是多少。思路 和 POJ 3286 How many 0’s? (数位dp)的思路基本是一样的,只是略有区别。 0和1~9要分开处理,是因为前缀0的问题。因为当某一位取0时,前面部分的数是不能为0的,而取1~9是可以前面为0的。代码#incl原创 2016-02-29 23:13:50 · 2253 阅读 · 0 评论 -
hihocoder 1149 : 回文字符序列(区间dp)
题意时间限制:2000ms单点时限:1000ms内存限制:256MB描述给定字符串,求它的回文子序列个数。回文子序列反转字符顺序后仍然与原序列相同。例如字符串aba中,回文子序列为”a”, “a”, “aa”, “b”, “aba”,共5个。内容相同位置不同的子序列算不同的子序列。输入 第一行一个整数T,表示数据组数。之后是T组数据,每组数据为一行字符串。输出 对于每组数据输出一行,原创 2016-04-11 22:39:05 · 3635 阅读 · 0 评论 -
2016年Linux兴趣小组免试题Level_5及Level_End详解
level_5.1关卡链接:level_5.1 本小关的目的是让大家了解规则。 本小关方格规模为3*3,左上角黄色格子为起点,右下角红色格子为重点,页面右侧有一数字,表示当前所累加的数字之和。通过几次尝试之后,可以发现,从左上角开始,我们可以按下方向键或者右方向键来移动方格,直到到达右下角终点格子,路径所累加的数字和若最大,则视为成功过关,否则失败重新来过。level_5.2关卡链接:l原创 2016-04-29 17:52:28 · 4420 阅读 · 0 评论 -
BestCoder Round #81 (div.2) 1004 String(动态规划)
题目链接:BestCoder Round #81 (div.2) 1003 String题意 中文题,上有链接,就不贴了。思路 枚举起点i,计算可以达到k个不同字母的最小下标j,则此时有子串len-j个。 将所有起点的值加起来即是结果。代码#include<iostream>#include<algorithm>#include<vector>using namespac原创 2016-04-22 22:29:25 · 2304 阅读 · 0 评论 -
51Nod 1376 最长递增子序列的数量(dp+树状数组)
题目链接最长递增子序列的题做个不少,让求数量的第一次做,O(n^2)的代码很好写,但数据范围50000,故无情超时,想了很久,总算有所得。时间: O(nlog(n)) 空间: O(2*n)思路 O(n^2)的思路中,每次求以第i个数结尾的最大长度和记录总数都要对前i-1个数进行遍历比较,如果能把这个比较过程转化为对前i项对求和,就可以用树状数组或线段数进行求和优化了。 重载+,按照题目需原创 2015-12-16 03:38:13 · 1910 阅读 · 2 评论 -
HDU 3555 Bomb(数位dp&记忆化搜索)
题目链接:[kuangbin带你飞]专题十五 数位DP D - Bomb题意 求1~n的范围里含有49的数字的个数。思路 记忆化搜索 dfs(len, pre, flag) len表示当前位数 pre==0 不含49且上一位不为4 pre==1 不含49且上一位为4 pre==2 含49 flag表示是否可以任意取值(判断范围)。 即可原创 2016-02-14 22:01:09 · 1913 阅读 · 0 评论 -
HDU 2089 不要62(数位dp&记忆化搜索)
题目链接:[kuangbin带你飞]专题十五 数位DP C - 不要62题意 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。 不吉利的数字为所有含有4或62的号码。例如: 62315 73418 88原创 2016-02-14 00:04:25 · 2111 阅读 · 0 评论 -
51Nod 1022 石子归并 V2 (划分型dp四边形不等式优化)
石子归并以前做过好几次,是经典划分型dp题之一,一直用的O(n3)的正常dp方法,也从未想过该怎么去优化它。直到昨天做这道题,n的范围由往常的100改为了1000,老方法一直超时,苦不堪言,搜到有个四边形不等式的优化方法,看帖子,画式子,拉着学长帮忙推导,总算是大概弄明白了一点。dp(i,j) = min(dp(i,k)+dp(k+1,j)) + w(i,j);(i < j, i原创 2015-12-03 03:34:46 · 2287 阅读 · 0 评论 -
HDU 1024 Max Sum Plus Plus
题目链接:[kuangbin带你飞]专题十二 基础DP1 A - Max Sum Plus Plus题意 给n个数,将其分为m部分,各部分之间不能有交叉重叠,求最大和思路 dp[i][j]表示前j个数分为i部分的最大和,则 dp[i][j] = max(dp[i][j-1] + a[j], dp[i-1][k] + a[j]) i-1<=k<=j-1 前者是将第j个数加入到第i原创 2016-01-21 19:34:01 · 2214 阅读 · 1 评论 -
HDU 1029 Ignatius and the Princess IV(水题亦有妙法)
题目链接:[kuangbin带你飞]专题十二 基础DP1 B - Ignatius and the Princess IV题意 给n(奇数)个数,定义特殊的数为在序列中出现次数不少于(n+1)/2次的数,找出这个特殊的数思路 我ac的思路是直接排序,然后一次循环进行对出现次数最大值的判断。 还有一种方法是排序后找第n/2大的数,因为特殊数出现次数超过一半,所以排序后中位数一定是特原创 2016-01-21 21:39:18 · 2377 阅读 · 4 评论 -
HDU 1074 Doing Homework(状态压缩dp)
题目链接:[kuangbin带你飞]专题十二 基础DP1 D - Doing Homework题意 有n门功课需要完成,每一门功课都有时间期限以及你完成所需要的时间,如果完成的时间超出时间期限多少单位,就会被减多少学分,问以怎样的功课完成顺序,会使减掉的学分最少,有多个解时,输出功课名排列最小的一个。思路 利用二进制位的方法来解题用过不少次,但真正意义上的状态压缩dp,这是第一道,有纪念意原创 2016-01-22 17:28:28 · 1788 阅读 · 2 评论 -
HDU 1069 Monkey and Banana(最大递增子串)
题目链接:[kuangbin带你飞]专题十二 基础DP1 C - Monkey and Banana题意 给定箱子种类数量n,及对应长宽高,每个箱子数量无限,求其能叠起来的最大高度是多少(上面箱子的长宽严格小于下面箱子)思路 每种箱子有三种放置方式且数量无限,故可将每个箱子按三个箱子看待。对所有箱子按主长副宽进行先大后小排序,那么问题就成了求最大递增子串。 因为n的范围特别小,只有3原创 2016-01-21 23:19:52 · 1570 阅读 · 0 评论 -
HDU 1087 Super Jumping! Jumping! Jumping!(最大递增子串和)
题目链接:[kuangbin带你飞]专题十二 基础DP1 E - Super Jumping! Jumping! Jumping!题意 起点(-无穷)终点(+无穷)中间有n个点,各有一个值,现想从起点到达终点,只能前行不能后退,且下一步必须比前面的点的值大,求所有走的点的值总和最大是多少。思路 dp[i] = max(dp[k] + a[j]); 1<=k<=i-1; 和求最大递增子原创 2016-01-22 18:10:55 · 1942 阅读 · 0 评论 -
HDU 1260 Tickets
题目链接:[kuangbin带你飞]专题十二 基础DP1 H - Tickets题意 给出T,表示有T组样例 给出n,表示有n个人买票 给出n个数表示这个人单独买票会花的时间.. 给出n-1个数,表示这个人和前面那个人一起买票会花的时间 求最快多少分钟可以把票买完思路 dp[i] = max(dp[i-1]+a[i], dp[i-2]+b[i])代码#includ原创 2016-01-22 21:04:37 · 1131 阅读 · 0 评论 -
HDU 1160 FatMouse's Speed
题目链接:[kuangbin带你飞]专题十二 基础DP1 J - FatMouse’s Speed题意 给n个老鼠的体重和速度,求找出一个最长的序列,此序列体重递增速度递减思路 按体重递增排序,再求最长递增(此递增表示体重递增速度递减)子序列。 dp[i] = max(dp[j]+1) 0<=j<=i-1代码#include<iostream>#include<cstring>原创 2016-01-22 21:57:44 · 1228 阅读 · 0 评论 -
POJ 1661 Help Jimmy
题目链接:[kuangbin带你飞]专题十二 基础DP1 M - Help Jimmy做中文题真开心,不用浪费时间在翻译上,上帝啊,让中文统治世界吧。题意 Description “Help Jimmy” 是在下图所示的场景上完成的游戏。 场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。 Jimmy老鼠在时刻0从高于所有平台的某处开原创 2016-01-23 04:40:23 · 1513 阅读 · 0 评论 -
POJ 2533 Longest Ordered Subsequence
题目链接:[kuangbin带你飞]专题十二 基础DP1 N - Longest Ordered Subsequence题意 求最大递增子序列的长度思路 两种方法 1. dp[i] = max(dp[j]+1) 1<=j<=i-1(n^2) 2. LIS(nlogn)代码#include<iostream>#include<cstring>#include<cmath>原创 2016-01-24 22:30:35 · 1010 阅读 · 0 评论 -
POJ 3186 Treats for the Cows
题目链接:[kuangbin带你飞]专题十二 基础DP1 O - Treats for the Cows题意 给长度为n的序列,每次只能从首或尾取一个数,第i次取的数权值为(数值*i),求取完所有的数可以达到的最大权值。思路 dp[i][j]表示左边取了i个数,右边取了j个数 故 dp[i][j] = max(dp[i-1][j] + a[i]* (i+j), dp[i][j-原创 2016-01-24 23:51:52 · 1824 阅读 · 0 评论 -
HDU 1078 FatMouse and Cheese(记忆化搜索)
题目链接:[kuangbin带你飞]专题十二 基础DP1 P - FatMouse and Cheese题意 给n*n地图,老鼠初始位置在(0,0),它每次行走要么横着走要么竖着走,每次最多可以走出k个单位长度,且落脚点的权值必须比上一个落脚点的权值大,求最终可以获得的最大权值 (题目很容易会理解错题意,道友小心)思路 记忆化搜索,具体见代码注释代码#include<iostrea原创 2016-01-25 18:45:19 · 1570 阅读 · 1 评论 -
HDU 2859 Phalanx
题目链接:[kuangbin带你飞]专题十二 基础DP1 Q - Phalanx题意 给定矩阵,求符合对称矩阵的最大子矩阵的宽度。 这里的对称矩阵是以左下至右上为轴的。思路 一个n*n的对称矩阵,对角线上的元素上方与右方的相同元素数量,一定比其左下方少1。 例如 123 412 541 上面矩阵对角线上 3的相同元素数量为1(包括自身), 1为2原创 2016-01-26 00:47:59 · 2358 阅读 · 0 评论 -
POJ 3616 Milking Time(最大递增子序列)
题目链接:[kuangbin带你飞]专题十二 基础DP1 R - Milking Time题意 奶牛为自己规划下面n时间内的产奶,m个时间段,每个段有a,b,c表示从a时到b时共可产奶c。 挤奶工每次挤奶必须挤完完整的时间段,且每次挤完需要休息r时,求最终可获得的牛奶最大值 ps. 上面的n简直了,不仔细看题很容易误解,差点让我简单问题复杂化,所有的时间段的时间都不会超出1~原创 2016-01-26 01:24:43 · 2591 阅读 · 0 评论 -
动态规划之最优配对问题
ps 昨晚看了紫书上的最优配对问题,对于上面没有对i判断就直接取异或操作百思不得解,本想今天问学长,百度了下,才发现那里是作者写错了,唉,有点唏嘘,学的越多,对待权威越不敢坚信自己了。。。题意 空间里有n个点P0,P1,…,Pn-1,你的任务是把它们配成n/2对(n是偶数),使得每个点恰好在一个点对中。所有点对中两点的距离之和应尽量小。思路 因为是对集合进行配对,自然需要记录当前集合原创 2016-03-01 15:13:24 · 5256 阅读 · 1 评论 -
HDU 4352 XHXJ's LIS(数位dp&状态压缩)
题目链接:[kuangbin带你飞]专题十五 数位DP B - XHXJ’s LIS题意 给定区间,求出有多少个数满足最长上升子序列(将数看作字符串)的长度为k。思路 一个数的上升子序列最大长度为10,所以每一个上升子序列的状态都可以用10个二进制位来表示。 上升子序列的变化可以用LIS的方式来更新。 dp[len][num][k] len为当前的位,num为当前上升子序原创 2016-02-13 22:51:48 · 2395 阅读 · 1 评论 -
CodeForces 55D Beautiful numbers(数位dp&&离散化)
题目链接:[kuangbin带你飞]专题十五 数位DP A - Beautiful numbers题意ps:第一道数位dp,题真好,虽然是参考大牛方法悟过才a,但仍收获不少。 求一个区间内的Beautiful numbers有多少个。Beautiful numbers指:一个数能整除所有组成它的非0数字。 例如15可以被1和5整除,所以15是Beautiful numbers。思路 Be原创 2016-02-13 01:53:29 · 4690 阅读 · 10 评论