随笔分类 -  动态规划

摘要:*题意:给定一定的金额cash,在给出n中货币,每种货币有一定的数量。问:在不超过cash的条件下,用给定货币组成最接近cash的金额数是多少。*思路:完全背包问题+数量限制。要实现并不困难,不过由于数据较大,以上思路有三重循环会TLE。所以,必须优化。至于优化,可以选择二进制优化,或者把循环去掉一层。1.二进制优化是把物品个数用二进制数表示出来,以减少循环次数。2.去掉物品书的那层循环:因为我们在计算dp[i+1][j],枚举物品数量k>=1的情况时,与在计算dp[i+1][j-d[i]],枚举的k>0的情况恰好相同,所以我们可以不用在用到k循环达到优化的效果。 1 #inclu 阅读全文
posted @ 2013-10-16 12:35 Neptunes 阅读(214) 评论(0) 推荐(0)
摘要:*题意: 给定一定的金额cash,在给出n中货币,每种货币有一定的数量。问:在不超过cash的条件下,用给定货币组成最接近cash的金额数是多少。*思路: 完全背包问题+数量限制。要实现并不困难,不过由于数据较大,以上思路有三重循环会TLE。所以,必须优化。至于优化,可以选择二进制优化,或者把循环去掉一层。 1.二进制优化是把物品个数用二进制数表示出来,以减少循环次数。 2.去掉物品书的那层循环:因为我们在计算dp[i+1][j],枚举物品数量k>=1的情况时,与在计算dp[i+1][j-d[i]],枚举的k>0的情况恰好相同,所以我们可以不用在用到k循环达到优化的效果。二维数.. 阅读全文
posted @ 2013-09-28 21:43 Neptunes 阅读(329) 评论(0) 推荐(0)
摘要:*题意: 给定所需珍珠的数量与其相应的价格,计算最小的花费。假如要买某种价格的珍珠必须先额外买10颗,可 以用价格高的替代价格低的。(因此才需要计算最小值)。 比如:某种珍珠价格p,要买q颗,则花费为:(q+10)*p。再比如:价格100的需要1颗,价格150的需要100颗。买两种珍珠共需要100*(10+1)+150*(100+10)=17600.假如我们用150的代替100的,需要150*(101+10)=16650.显然后者省钱。*思路: 动态规划。 用sum[i]存储到第i种珍珠时珍珠的总量,dp[i]存储第i种珍珠是最优的购买方式,p[i]是价格,q[i]是数 量。 ... 阅读全文
posted @ 2013-09-24 21:32 Neptunes 阅读(303) 评论(0) 推荐(0)
摘要:描述 Description“低买高卖”是在神牛证券市场上成功的秘诀的一半。作为一个好的投资者,你必须还遵守下面这条建议:“逢低吸纳,越低越买”每次你购买股票的时候,你必须以比上次购买这只股票的价格更低的价格来购买这只股票。购买比上次便宜的股票的次数越多越好!你的目标是计算像这样的低价进仓最多可以进行多少次。数据会给你一只股票在一段时期内每日的交易价格(16位正整数)。你可以选择在任何一天购买股票。每次你选择购买股票的时候,股价必须严格小于你上次购买股票的股价。写一个程序来确定在那些日子购买股票来最大化你购买的次数。下面是一张股价表:日期 12345678910 11 12价格 68 69 5 阅读全文
posted @ 2013-08-16 15:53 Neptunes 阅读(418) 评论(0) 推荐(0)
摘要:*题意: 给出一个字符串,如果将字母表中的26个字母依次映射成数字1-26,这样便形成一个码,虽然加密的确很方便,可是解密存在很多种解密的方法,现在给出一串数字,要求求解该串数字有多少种解密方法.*思路:典型的动态规划,我们可以先1-3个数字的例子来模拟一下过程,思路有很多,暂时先介绍两个。思路(一):用dp[i]表示到当前数字为止时最多的解密方式种数,str[i]表示当前数字,所以有如下分析:1.可以与前一项合并解密也可以单独解密:dp[i]=dp[i-1]+dp[i-2],其中dp[i-1]表示不与前一个数合并解密,dp[i-2]表示当前数已经与前一个数合并解密。2.必须与前一个数字... 阅读全文
posted @ 2013-08-07 21:31 Neptunes 阅读(238) 评论(0) 推荐(0)