动态规划
ACM-Blog-WUCHAO
这个作者很懒,什么都没留下…
展开
-
动态规划—Problem C
动态规划—Problem C 题意 下棋。每颗棋子有不同的数值,要求只能从数值小的棋子走向比它大的棋子,如果下一颗棋子比它小就不能继续走了。求此过程中所走棋子代表的数的最大值。 解题思路 题目一大串,说白了就是个求最大递增子序列和。明白问题的实质后再做就不难了,明确状态方程就行:sum[j]=max{sum[i]}+a[j]; 其中,0<=i<=j,a[i]#include<iostream原创 2016-05-10 15:02:26 · 489 阅读 · 0 评论 -
动态规划—Problem D
动态规划—Problem D 题意 有一组数,它们的共同特征是它们的因数只含2,3,5,7,有5842个数,要求输入一个数输出对于位置的数是多少。 解题思路 分析题意,要做的事就是求出所有这些符合条件的数,然后输出就不难了。若一个数是Humble数,则它的2、3、5、7倍仍然是Humble数。设dp[i]为第i个Humble数,则dp[t] = min(2*dp[num2], 3*dp[nu原创 2016-05-08 16:56:54 · 204 阅读 · 0 评论 -
动态规划—Problem E
动态规划—Problem E 题意 有n种长方体,每种长方体都有无限多个,问用这些长方体最高能摆多高。要求是在下面的长方体的长要大于上面长方体的长,宽大于上面长方体的宽。 解题思路 读题发现,其实就是求最长的子序列问题,单调递减序列,但是复杂之处在于如何对长宽表示以及排序。在这里不妨采取让长和宽排序按递减的方式把问题转化为求最长单调递减序列。 感想 感觉还是有难度的,特别是在长和宽处理时原创 2016-05-07 22:39:24 · 547 阅读 · 0 评论 -
动态规划—Problem O
动态规划—Problem O 题意 将一个十进制数转换为二进制数。 解题思路 采取比较传统的方法,对输入的数除以2取余,存放到数组里,除到1时存入1结束。 感想 昨晚A的忘记写博客了,额~ AC代码#include<iostream>#include<cstring> using namespace std;int main(){ int n; int a[20原创 2016-05-07 18:03:54 · 257 阅读 · 0 评论 -
动态规划—Problem R
动态规划—Problem R 题意 题意:给出小猪钱罐的重量和装满钱后的重量,然后是几组数据,每组数据包括每种钱币的价值与重量。要求出重量最少能装满钱罐时的最大价值。 解题思路 完全背包问题。关于完全背包嘛,即在01背包的基础上,每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件……等很多种。如果仍然按照解01背包时的思路,令f[i]原创 2016-05-30 21:58:02 · 506 阅读 · 0 评论 -
动态规划—Problem G
动态规划—Problem G 题意 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接。但由于小径两侧都不能站人,所以他只能在小径上接。由于gameboy平时老呆在房间里玩游戏,虽然在游戏中是个身手原创 2016-05-30 21:41:21 · 284 阅读 · 0 评论 -
动态规划—Problem N
动态规划—Problem N 题意 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。 解题思路 递推。先分析下直线分割平面的情况,增加第n条直线的时候,跟之前的直线最多有n-1个交点,此时分出的部分多出了(n-1)+1;折线也是同理,f(1)=2,f(原创 2016-05-05 09:59:26 · 336 阅读 · 0 评论 -
动态规划—Problem K
动态规划—Problem K 题意 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。 解题思路 题目所述,但并未发现图,于是百度找到了原题与图(原图已附上)。分析后发现与前几个做的题目类似,思路同样也是递推,而且dp[1=1.dp[2]=2,同样的递推公式为:dp[i]=dp[i-1]+dp[i-2]。然后根据输入的a,b,相应输出dp原创 2016-05-04 16:41:39 · 207 阅读 · 0 评论 -
动态规划—Problem H
动态规划—Problem H 题意 穿过幽谷意味着离大魔王lemon已经无限接近了!可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机关。要知道,不论何人,若在迷宫中被困1小时以上,则必死无疑!可怜的yifenfei为了去救MM,义无返顾地跳进了迷宫。让我们一起帮帮执着的他吧!命运大迷宫可以看成是一个两维的方格阵列,如下图所示:原创 2016-05-26 21:38:20 · 427 阅读 · 0 评论 -
动态规划—Problem L
动态规划—Problem L 题意 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,求出铺放方案的总数。 解题思路 递推,假设用dp[i]表示2*i的方格一共有组成的方法数,我们已知dp[1]=1,dp[2]=2。现在假设我们已经知道了dp[i-1]和dp[i-2],再求dp[i],不过是在2*(i-1)的格子后边加上一格2*1的方格罢了,骨牌在这一格上横着放,竖着放,如原创 2016-05-03 14:08:45 · 226 阅读 · 0 评论 -
动态规划—Problem J
动态规划—Problem J 题意 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,求出共有多少种走法。 解题思路 递推问题,类似斐波那契数列。分析题目,可得到: dp[1] = dp[2] = 1; dp[n] = dp[n-1] + dp[n-2] (n > 2)。 创建dp数组,把到达每一层的走法放进去,最后根据输入相应输出即可。 感想 难度一般原创 2016-05-02 14:35:51 · 203 阅读 · 0 评论 -
动态规划—Problem Q
动态规划—Problem Q 题意 收集骨头。一个人有一个背包,背包容积是V,不同的骨头有不同的体积和价值,求收集到骨头价值的最大值。 解题思路 背包问题。剖析下问题,“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”,价值为dp[i-原创 2016-05-12 20:37:16 · 252 阅读 · 0 评论 -
动态规划—Problem M
动态规划—Problem M 题意 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛? 解题思路 类似斐波那切数列问题,简单递归了。 感想 水题了,不太明白意图。只好随便写写了。 AC代码#include<iostream>using namespace std;int main(){ int原创 2016-04-29 19:37:51 · 226 阅读 · 0 评论 -
动态规划—Problem F
动态规划—Problem F 题意 数塔问题,有数塔(类似于三角形数字但稍有不同),要求从顶层走到底层,若每一步只能走到相邻的结点,求经过的结点的数字之和最大是多少。 解题思路 可以采用从下往上的思路,即从最后一排的数向上递推,这时候的状态方程为:dp[i][j]+=dp[i+1][j+1],dp[i+1][j];按照这种方式求最大值就可以了。 感想 算是入门的题目吧,比较简单。 AC原创 2016-04-29 17:06:19 · 238 阅读 · 0 评论 -
动态规划—Problem B
动态规划—Problem B 题意 最长公共子序列问题。简而言之,给出两段字符串,找出它们公共子序列的最大值。 解题思路 设c[i][j]为字符串a的第i个字符与字符串b的第j个字符为止的最长公共子序列长度,那么有两种情况: 1. 当a[i] == b[j]时,c[i][j]应该是前一个状态的最长公共子序列长度 + 1,而前一个状态是c[i - 1][j]呢,还是c[i][j - 1]?原创 2016-04-29 16:35:58 · 270 阅读 · 0 评论 -
动态规划—Problem A
动态规划—Problem A 题意 最大子段和问题,给出n个数,求n个数连续子段中和最大值以及构成这个最大值的数字是从第几个到到几个,如果同一个最大值有多种情况,则输出第一组情况即可。 解题思路 用一种简单方式来写就是,定义三个状态变量,分别表示当前输入的数值,之前数据总和,和要求的最大值,同时也有相应的位置变量,接下来就是输入数据并判断条件,在此过程中相应的对位置做相应改变。最后求得后按要原创 2016-04-29 14:29:49 · 218 阅读 · 0 评论 -
动态规划—Problem P
动态规划—Problem P 题意 在一无限大的二维平面中,我们做如下假设: 1、每次只能移动一格; 2、不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走); 3、走过的格子立即塌陷无法再走第二次; 求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。 解题思路 递推。关键是找出递推公式。现在用数组dp[n]表示走原创 2016-05-10 18:29:11 · 249 阅读 · 0 评论 -
动态规划总结
动态规划总结小序: 最近一个月被动态规划折磨的不要不要的,然而期限已到,该专题被关闭,所以到了写份总结来复习与小结一下动态规划。总体说来,感觉DP的大部分题目都并不易做,虽然有些题目被人称作水题、入门题,不管怎么说吧,基本上关键的就是找状态转移方程了,这也是题目的难点所在。那好,本博客就来复习一下动态规划的基本内容和几类经典题目。基础知识: 什么是动态规划呢,简单来说,动态规划是解决多阶段决策原创 2016-06-01 23:08:12 · 357 阅读 · 0 评论