09 2013 档案

摘要:*题意: 给定一定的金额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 阅读(326) 评论(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 阅读(296) 评论(0) 推荐(0)
摘要:*算法介绍:扩展KMP算法是对KMP算法的一种扩展,对于求两个字符串的公共部分非常有效。题目可以有多种变化。最普通的的是给定母串text与子串part。求数组extend[i],extend[i]表示text[i...n]字符串与part最长前缀的长度。*思路:1.主代码:与KMP的思路一致,我们设next数组表示:next[i...n]与next数组本身的最长公共前缀长度。假设我们现在已经知道extend[0....i]的值,接下来要求extend[i+1]的值。设1=k+extend[k] 我们目前只能确定(1)中的L个字符匹配,接下来不能确定,所以需要挨个比较,并且比较完后需令:k=i+ 阅读全文
posted @ 2013-09-05 20:47 Neptunes 阅读(274) 评论(0) 推荐(0)