网站建设收费标准平台企业网站管理系统最新4湖南岚鸿牛x1 0
网站建设收费标准平台,企业网站管理系统最新4湖南岚鸿牛x1 0,全网营销网站怎么做,wordpress 文章总数3妹#xff1a;“你不是真正的快乐#xff0c; 你的笑只是你穿的保护色” 2哥 : 3妹还在唱五月天的歌啊#xff0c; 你不知道五月天假唱#xff0c;现在全网都在骂呢。 3妹#xff1a;知道啊#xff0c;可是关我什么事#xff0c;这个歌的确好听啊。 2哥 : 嗯嗯#xf…
3妹“你不是真正的快乐 你的笑只是你穿的保护色” 2哥 : 3妹还在唱五月天的歌啊 你不知道五月天假唱现在全网都在骂呢。 3妹知道啊可是关我什么事这个歌的确好听啊。 2哥 : 嗯嗯不错 还以为你是脑残粉无论黑白都只管追星呢。 3妹我是只管追歌的 歌好听就行啦。 2哥 : 追哥追哪个哥 难道是我这个2哥~ 3妹切谐音梗扣钱 2哥话说五月天演唱会的门票还挺贵的 要上千了 粉丝们花了钱如果听的假唱要伤心了。3妹会花1000块购买演唱会门票吗 3妹当然不会我有钱还不多买点吃的买点水果呢。 2哥说到购买水果我这里有一个关于购买水果的题目让我来考考你吧~ 题目
你在一个水果超市里货架上摆满了玲琅满目的奇珍异果。
给你一个下标从 1 开始的数组 prices 其中 prices[i] 表示你购买第 i 个水果需要花费的金币数目。
水果超市有如下促销活动
如果你花费 price[i] 购买了水果 i 那么接下来的 i 个水果你都可以免费获得。 注意 即使你 可以 免费获得水果 j 你仍然可以花费 prices[j] 个金币去购买它以便能免费获得接下来的 j 个水果。
请你返回获得所有水果所需要的 最少 金币数。
示例 1
输入prices [3,1,2] 输出4 解释你可以按如下方法获得所有水果
花 3 个金币购买水果 1 然后免费获得水果 2 。花 1 个金币购买水果 2 然后免费获得水果 3 。免费获得水果 3 。 注意虽然你可以免费获得水果 2 但你还是花 1 个金币去购买它因为这样的总花费最少。 购买所有水果需要最少花费 4 个金币。 示例 2
输入prices [1,10,1,1] 输出2 解释你可以按如下方法获得所有水果
花 1 个金币购买水果 1 然后免费获得水果 2 。免费获得水果 2 。花 1 个金币购买水果 3 然后免费获得水果 4 。免费获得水果 4 。 购买所有水果需要最少花费 2 个金币。
提示
1 prices.length 1000 1 prices[i] 10^5
思路 动态规划寻找子问题 我们需要解决的问题是「获得第 1 个及其后面的水果所需要的最少金币数」。
第 1 个水果一定要买然后呢
第 2 个水果可以购买也可以免费获得
如果购买那么需要解决的问题为「获得第 2 个及其后面的水果所需要的最少金币数」。 如果免费获得那么需要解决的问题为「获得第 3 个及其后面的水果所需要的最少金币数」。 无论哪种情况都会把原问题变成一个和原问题相似的、规模更小的子问题所以可以用递归解决。
java代码
class Solution {public int minimumCoins(int[] prices) {int n prices.length;int[] memo new int[(n 1) / 2];return dfs(1, prices, memo);}private int dfs(int i, int[] prices, int[] memo) {if (i * 2 prices.length) {return prices[i - 1]; // i 从 1 开始}if (memo[i] ! 0) { // 之前算过return memo[i];}int res Integer.MAX_VALUE;for (int j i 1; j i * 2 1; j) {res Math.min(res, dfs(j, prices, memo));}return memo[i] res prices[i - 1]; // 记忆化}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/90537.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!