动态规划
qq2844
这个作者很懒,什么都没留下…
展开
-
1010 Problem J
1010 Problem J题意:有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?思路:此题对于要跨上的第M级楼梯,它全部的走法为到达第M-1级楼梯走法之和,因此通过递归,不难求出全部走法。#includeusing namespace std;int main(){ int n,m,i,f[41]; cin>>n;原创 2016-04-28 21:24:18 · 217 阅读 · 0 评论 -
1020 Problem T
题意:购买手表,有N种硬币和总价值为M的手表。第i种硬币最多有c[i]个,每个价值是a[i]。用硬币购买手臂,总和不超过手表总价值,且价值总和最大思路:多重背包,定义数组dp[],然后判断dp[i]==1是否成立,即能否组合成不超过M的任意一个数,如果可以计数加1.感想:比较典型的多重背包,还是要掌握好多重背包的基础合理转化。#include #include #include原创 2016-05-31 10:56:36 · 165 阅读 · 0 评论 -
1001 Problem A
1001 Problem A题意:Given a sequence a[1],a[2],a[3]......a[n],your job is to calculate the max sum of a sub-sequence. For example, given(6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 =原创 2016-05-07 22:11:08 · 424 阅读 · 0 评论 -
1003 Problem C
1003 Problem C题意:一个棋盘中,棋子都被标记正整数,要求从0位置开始,达到最大值,求做经过的棋子的和的最大值。思路:要求经过棋子的和的最大值,这题类似于最大子序列问题,而对于要求的最大子序列,关键f[i]=max{f[j]}+a[i],其中f[i]为当前值,f[j]为序列的前一个值。感想:一上来,思考太片面,直接判断前后两个值的大小,然后加入到序列中,计算最后结果,然后w原创 2016-05-18 21:25:10 · 222 阅读 · 0 评论 -
1018 Problem R
题意:给出一个小猪钱罐的重量和装满钱后的重量,以及几种钱币的价值与重量,要求出重量最少装满钱罐时的最大价值。思路:完全背包,注意第二次遍历的顺序,本题是求最小值,要把dp[i]的值设为无穷。感想:比较典型的完全背包问题,不过要注意其与0-1背包第二次遍历的不同。#include #include #include using namespace std;int dp[1原创 2016-05-30 22:49:36 · 216 阅读 · 0 评论 -
1023 Problem W
1023 Problem W题意:Speakless很早就想出国,要申请国外的任何大学,你都要交纳一定的申请费用,Speakless没有多少钱,总共只攒了n万美元。他将在m个学校中选择若干的(当然要在他的经济承受范围内)。每个学校都有不同的申请费用a(万美元),并且Speakless估计了他得到这个学校offer的可能性b。不同学校之间是否得到offer不会互相影响。计算一下,他可以收到至少一原创 2016-05-19 22:14:21 · 230 阅读 · 0 评论 -
1007 Problem G
1007 Problem G题意:都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接。但由于小径两侧都不能站人,所以他只能在小径上接。由于gameboy平时老呆在房间里玩游戏,虽然在游戏中是个身手原创 2016-05-21 13:59:42 · 250 阅读 · 0 评论 -
1017 Problem Q
1017 Problem Q题意:一个容量为V的背包,放入体积和价值不同的骨头,求所能放入的骨头的最大价值。思路:0-1背包问题,只要判断前一块骨头是否放入背包,状态方程为dp[i]=max(dp[i],dp[i-w[j]]+v[j])。其中w[j]表示当前骨头的体积,v[j]表示当前骨头的价值。感想:背包问题,关键还是当前值,与前一状态值的判断比较。#include#incl原创 2016-05-21 19:36:30 · 207 阅读 · 0 评论 -
1019 Problem S
1019 Problem S题意:给定一组设备的价值V,及其数量M,如果能够将这组设备分为两组,并使其价值A、B,并且A>=B。思路:对于所有设备的价值,求得总价值的1/2后,然后将题目转化为0-1背包。感想:题目一上来,将设备分组,很可能无从下手,而通过其平均价值,转化为0-1背包后,只要弄清价值、数量,几个循环之间的关系,以及状态方程即可。#includeusing nam原创 2016-05-22 22:34:42 · 200 阅读 · 0 评论 -
1004 Problem D
1004 Problem D题意:一个数如果它的素数因子是2、3、5、7,则这个数是丑数,给定任意一个数,输出它的丑数。(The sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18,20, 21, 24, 25, 27, ... shows the first 20 humble numbers. )思路:由题意可以看出,以原创 2016-05-17 23:03:34 · 241 阅读 · 0 评论 -
1008 Problem H
题意: 一个N*M矩阵,从左上角移动,每个矩阵的格子有不同值,只能向右或者向下走,向下一次只能走一格。但是如果向右走,则每次可以走一格或者走到该行的列数是当前所在列数倍数的格子,即:如果当前格子是(x,y),下一步可以是(x+1,y),(x,y+1)或者(x,y*k) 其中k>=1。求到达矩阵右下方最大值。思路:对于lemon的移动,其当前值有三个因素决定,其状态方程是:dp[i][j] =原创 2016-05-29 21:33:14 · 223 阅读 · 0 评论 -
1006 Problem F
1006 Problem F题意:数塔问题,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?思路:对于数塔问题,如果从上至下,每次求出最大下一层可用最大值,问题并不复杂,可是如果这样做,就会发现,在求解中,很多数会重复计算,程序时间复杂度就会增大,因此把每次所得值保存在一个数组中。感想:此题虽然看上去应该从上至下,求最优解,不过这样有可能会因为前一步而原创 2016-04-27 22:47:17 · 235 阅读 · 0 评论 -
1013 Problem M
1013 Problem M题意:有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?思路:第n年的母牛数量,可以由第n-1年加上当年所增加的母牛数得到,递归求解。感想:想法不够灵活啊!一上来就理解错题意,想要把每一年母牛数量全部加起来,越做越错!#includeusing namespace std原创 2016-04-29 22:21:24 · 218 阅读 · 0 评论 -
1012 Problem L
1012 Problem L题意:2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数。思路:骨牌铺满方格,如果计算几组数据后就会发现,对于2×n的一个长方形方格,它铺放方案总数是其前两次铺放总数的和,利用递归问题并不复杂。感想:题目找到规律后虽然不难,但在这里,如果数组采用int类型,会越界。#includeusing namespace st原创 2016-04-29 22:41:06 · 326 阅读 · 0 评论 -
1002 Problem B
1002 Problem B 题意:求出两个字符串的公共子序列长度最大值。思路:最大公共子序列长度,关键是判断当前字符是否相等,如果相等,那么dp[i][j]=dp[i-1][j-1]+1;如果不相等,那么dp[i][j]=max(dp[i-1][j],dp[i][j-1]);(其中dp[i][j]为当前最大公共子序列的长度)感想:不久前查了一下,关于最大子序列的问题,设有二维数原创 2016-05-14 21:32:07 · 259 阅读 · 0 评论 -
1014 Problem N
1014 Problem N题意:我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分。思路:先分析下直线分割平面的情况,增加第n条直线的时候,跟之前的直线最多有n-1个交点,此时分出的部分多出了(n-1)+1;折线也是同理,f(1)=2,f(2)=7,先画好前面n-1条折原创 2016-05-04 22:28:36 · 275 阅读 · 0 评论 -
1015 Problem O
1015 Problem O 题意:Give you a number on base ten,you shouldoutput it on base two.思路:十进制转二进制,用该数不断除以2,能整除则记录0,不能则记为1,这里在输出时需要倒序输出。#includeusing namespace std;int main(){ int n,i,m;原创 2016-05-05 21:05:25 · 202 阅读 · 0 评论 -
1016 Problem P
1016 Problem P题意:一无限大的二维平面中,我们做如下假设: 1、每次只能移动一格;2、不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);3、走过的格子立即塌陷无法再走第二次;求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。思路:令f[n]表示走n步的方案数,x[n]表示向下走的方案数,z[n]表示向左原创 2016-05-05 21:15:18 · 226 阅读 · 0 评论 -
1011 Problem K
1011 Problem K题意:有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。其中,蜂房的结构如下所示。思路:蜜蜂爬到蜂房n的路线数为,其到蜂房n-1和蜂房n-2的路线数之和,不断的递归求解。感想:这里对于从蜂房a到蜂房b的可能路线数,实际上可以看做是从蜂房1到蜂房b-(a-1)的路线数。#includeusi原创 2016-05-05 21:23:42 · 251 阅读 · 0 评论