zoukankan      html  css  js  c++  java
  • 每日编程系列———买苹果

    一、题目

    小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。 
    输入描述:
    输入一个整数n,表示小易想购买n(1 ≤ n ≤ 100)个苹果
    输出描述:
    输出一个整数表示最少需要购买的袋数,如果不能买恰好n个苹果则输出-1
    输入例子:
    20
    输出例子:
    3
    二、答案解析
    此题用动态规划的思想就可以解决,题目要求出购买n个苹果的袋数最少的方案,容易理解,当n越来越大时,那么确定方案的难度就越大,因此,我们可以先规划出n较小时的最优方案,然后随着n的变大,不断修改方案,直到得出最终方案, 详细说一下解题的步骤:
    1.首先创建一个长度为n+1的动态规划数组,数组元素i表示购买i个苹果的最少袋数dp[i];
    2.对动态规划数组进行初始化,dp[0]的初始值当然是0了,然后将其他的元素初始化为Integer.MAX_VALUE,表示不可达,即不能恰好购买指定数量的苹果;
    3.对动态规划数组进行遍历,我们详细描述一下遍历至元素i时的操作,首先判断当前元素的值是否为
    Integer.MAX_VALUE,若是则跳过当前循环,否则计算dp[i+6.的数值,在dp[i+6]的原始值和dp[i]+1(表示买一袋)中取最小值然后赋给dp[i+1],保证方案为最优方案,同样,我们需要进行dp[i+8]的计算,选出最优方案(注意:不过在进行计算是,一定要保证i+6或者i+8小于等于n,防止数组越界)
    7.当循环结束时,判断dp[n]等于Integer.MAX_VALUE,那么输出-1.表示不能恰好购买n个苹果,否则输出dp[n],即为最优方案.
    算法如下:
    
    
    
    


    
    
  • 相关阅读:
    May 1 2017 Week 18 Monday
    April 30 2017 Week 18 Sunday
    April 29 2017 Week 17 Saturday
    April 28 2017 Week 17 Friday
    April 27 2017 Week 17 Thursday
    April 26 2017 Week 17 Wednesday
    【2017-07-04】Qt信号与槽深入理解之一:信号与槽的连接方式
    April 25 2017 Week 17 Tuesday
    April 24 2017 Week 17 Monday
    为什么丑陋的UI界面却能创造良好的用户体验?
  • 原文地址:https://www.cnblogs.com/coderls/p/6445366.html
Copyright © 2011-2022 走看看