2016SDAU课程练习三
文章平均质量分 58
Bourbon_KID
这个作者很懒,什么都没留下…
展开
-
Problem A
简单题意给出一组数字,从中找出连续的子集和,使得和最大的那个子集,输出的时候,要输出最大和,子集的开头位置,结束位置。解题思路形成过程这个应该是DP的典型题型了吧,上课老师讲的和这个题差不多,只不过这个题多了位置记录,子串和如果是负的话没做什么要求,首先先用DP找出最大值,思想就是以每一个数为结尾,那么这个数前面的子串求和最大(也就是最优情况),将所有的以每个数结尾的最优情况保存在数组原创 2016-04-26 11:03:53 · 225 阅读 · 0 评论 -
Problem V
简单题意知道每家银行的存钱,和抢劫银行被抓的概率,和自己被抓的最大概率。求出在不被抓的情况下,抢劫最多钱数。解题思路形成过程当前状态不被抓的概率等于,不抢这家银行之前不被抓的概率乘抢劫将这家银行不被抓大概率,因此状态转移方程:dp[j]=max(dp[j],dp[j-m[i]]*pro[i]), dp[j]表示抢j钱时的最大不被抓概率。感想动态规划的思想真的很精致巧妙A原创 2016-05-04 12:06:03 · 342 阅读 · 0 评论 -
Problem C
简单题意给你个棋盘,棋盘上有数字,不过只能走比当前数字大的地方,求出从起点到终点,能走过最大数字和。解题思路形成过程这个不就是老师讲的求最大上升子序列和,的那个题吗,看到英文比较长就没想看,看了之后其实一开始没看懂(英文一般般),真是换汤不换药,思想就是,假设以当前数为结尾,那么最优就是,前面最优加上当前数。最后再求出这些不同结尾的序列的最大值。感想细节问题处理不好错了两次原创 2016-05-15 17:01:48 · 205 阅读 · 0 评论 -
Problem Q
简单题意给出背包能装的骨头容量,给出每个骨头所占容积,和价值,求出背包所能装骨头的最大价值解题思路形成过程这类背包问题做多了,套路就出来了,每个骨头开始遍历,如果背包容量能盛下这个骨头,那就看是否当前容量下的价值,是否比“没加当前骨头容量的价值,加上当前骨头的价值”的价值大,否则就拿上这块骨头感想背包问题,也可以用dp做,感觉比贪心好理解一点。AC代码#include原创 2016-05-05 12:36:55 · 221 阅读 · 0 评论 -
Problem U
简单题意有分别价值为1,2,3,4,5,6的6种物品,每种价值物品有相对应的数量,问能否将物品分成两份,使得两份总价值相等。解题思路形成过程老师上课讲的例题,主要思想就是把一个多重背包问题,转化为01背包或完全背包来解决。原创 2016-05-29 22:43:43 · 253 阅读 · 0 评论 -
动态规划专题总结
动态规划思想比较巧妙,是解决多阶段决策问题的一种方法。如果一类问题的求解过程可以分为若干个互相联系的阶段,在每一个阶段都需作出决策,并影响到下一个阶段的决策。多阶段决策问题,就是要在可以选择的那些策略中间,选取一个最优策略,使在预定的标准下达到最好的效果。典型例题有,菲波那契数列问题,背包问题,最典型的代表例题还是最长上升子序列的问题。首先是菲波那契数列的问题,这个也是比较简单的动态规划的问题原创 2016-05-30 12:37:18 · 439 阅读 · 0 评论 -
Problem E
简单题意给猩猩N种长方体,让猩猩通过 叠长方体来够到上方的香蕉。 现在给你N种长方体,计算,最高能堆多高。要求位于上面的长方体的长宽要大于下面长方体的长宽。解题思路形成过程一开始没想出来怎么做,看着网上代码逆推了一下,每种长方体都可以变成6种(有三个不同的面,每个面长和宽都可以调换),每次输入把变成6种存到数组里,对于每种不同情况都会影响接下来箱子的放置方法,就需要用动态规划,先排序(原创 2016-05-07 09:46:25 · 481 阅读 · 0 评论 -
Problem R
简单题意给一个储钱罐,已知空的储钱罐和装了硬币的储钱罐的质量。然后给了n种硬币的质量和价值。问储钱罐里最少有多少钱。解题思路形成过程原创 2016-05-07 12:43:59 · 251 阅读 · 0 评论 -
Problem B
简单题意字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列。令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X的子序列,存在X的一个严格递增下标序列,i1,…,ik-1>,使得对所有的j=0,1,…,k-1,有xij=yj。例如,X=“ABCBDAB”,Y=“BCDB”是X的一个子序列。(实在不好原创 2016-05-09 22:18:15 · 402 阅读 · 0 评论 -
Problem X
简单题意给出手中所拥有的钱,商品能有购买得资格所需要的钱,商品的价格,以及商品对自身的价值,求出最大你能获得的价值解题思路形成过程这个和出国选学校的的那个差不多,只不过是把申请资格和实际花费的钱分离了出来。在原先代码改一改就行了。AC代码#include#include#include#include#includeusing namespace std;原创 2016-05-03 15:35:39 · 267 阅读 · 0 评论 -
Problem W
简单题意总共n万美元,在m个学校中选择若干的(在经济承受范围内)。每个学校都有不同的申请费用a(万美元),并且估计了得到这个学校offer的可能性b。不同学校之间是否得到offer不会互相影响。计算一下,可以收到至少一份offer的最大概率。解题思路形成过程至少一份offer的最大概率,直接求不好求,但是可以求它的对立面,即一个都不能得到的最小概率,这样就把问题转化为了dp问题。只是求原创 2016-05-03 12:45:40 · 233 阅读 · 0 评论 -
Problem D
简单题意有一个序列,序列每一个数所有因数(全部拆成素数),都是由2.3.5.7.组成的(数量不限),把这种数称为Humble数,给出n,求出数列第n个数应该是多少。解题思路形成过程若一个数是Humble数,则它的2、3、5、7倍仍然是Humble数。就是说不断找出按不同数量组成的2.3.5.7的数从小到大排序,设a2,a3,a5,a7,分别保存2.3.5.7在humble数中的组成个数原创 2016-05-01 22:11:21 · 224 阅读 · 0 评论 -
Problem L
简单题意给出一个2*n的空间,用2*1的骨牌把他填满,问有多少方法解题思路形成过程虽然是2*n,其实只考虑一行就行(题目特殊有对称性),根据动态规划思想的启发,每行一次安排骨牌要么一下占一个,要么占2个,如果前面安排方式确定,那么多一个就可以,在前面的情况下加一个放一个,或在前面的前面的情况下,加两个。感想一开始测试挺对的,交上去就是不对,感觉是不是中间出了什么问题,就把n=5原创 2016-04-26 12:33:45 · 225 阅读 · 0 评论 -
Problem M
简单题意有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。第n年的时候,共有多少头母牛?解题思路形成过程这个题上学期老师给我们布置过,翻了上学期的代码,发现原来这就是动态规划呀!!,也是一个斐波那契数列,和Problem L是一样的,首先判断n,因为前4年是数列初始值,不能dp需要人为直接赋值,四年之后用上一年的牛(本来活着的)加上三年前的牛(有多原创 2016-04-26 20:26:59 · 198 阅读 · 0 评论 -
Problem N
简单题意求n条折线分割平面的最大数目。解题思路形成过程拿到这个题的时候,就联想起,高中的时候听过自主招生的题,其中有一道题就是,用直线分割平面最大区域数(听说当年华罗庚出了一个用直线分割空间的题),这个其实就是递归,直线的情况是若要加上第n根直线分割最多,就要让n-1根分割最多的情况下,让第n根直线,与前面的n-1根直线都有交点,递推关系就出来了,折线的情况也是类似,麻烦的就是求出第n原创 2016-04-26 22:06:38 · 221 阅读 · 0 评论 -
Problem F
简单题意数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少解题思路形成过程可以倒着想,从最底层走到对顶层,从底层往上走,每往上走一个点,都会有两个来源,选取其中最大的来源,逐层往上,直到到达顶层,则顶层的数据就是最大和。感想老师讲过的例题,做起来还是很简单的AC代码#include#include#includeusing原创 2016-04-28 22:15:18 · 238 阅读 · 0 评论 -
Problem J
简单题意有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法解题思路形成过程感觉做过很多类似的题,就是变形的斐波那契数列,对于每层楼梯,可能是上一个状态走了两层到达的,也可能是走了一层上来的。AC代码#include#include#includeusing namespace std;int main(){原创 2016-04-28 22:32:54 · 200 阅读 · 0 评论 -
Problem K
简单题意有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。解题思路形成过程这种题做多了一眼就看出来是菲波那契数列,只不过这个不是从一开始开始做的,是从中间任意一个位置开始。其实都一样感想中文题简单点,注意64位整数AC代码#include#include#includeusing namespace st原创 2016-04-30 18:15:01 · 196 阅读 · 0 评论 -
Problem P
简单题意在一无限大的二维平面中。1.每次只能移动一格 2.不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走)3.走过的格子立即塌陷无法再走第二次求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)解题思路形成过程这个就比普通的菲波那契数列增加了点难度,需要推一下:f[n]表示走n步的方案数,x[n]表示向下走的方案原创 2016-04-30 20:15:11 · 252 阅读 · 0 评论 -
Problem O
简单题意给出十进制数,输出对应二进制数解题思路形成过程就是不断用取余2,取整2转换2进制,最后反向输出就行。感想怎么还有这么简单的题,这个也是动态规划?有去看了看动态规划的概念,好像还真是。AC代码#include#include#include#include#includeusing namespace std;int main(){原创 2016-05-01 11:14:30 · 219 阅读 · 0 评论 -
Problem S
简单题意杭电要分家,家当要尽量平均分,保证A>=B,给出,每种价值的家当的价值,及其数量,求出平分家当的结果。解题思路形成过程题目中有个提示,You can assume that all V are different,把每个家当都当成不同的(忽略价值一样),这样用一个数组,把每个价值分出来,之后就是dp了,dp数组保存的是当前状态最优的分配方法。AC代码#include原创 2016-05-19 22:55:44 · 212 阅读 · 0 评论