【一次过】【2017网易】买苹果

小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。

输入描述:

输入一个整数n,表示小易想购买n(1 ≤ n ≤ 100)个苹果

输出描述:

输出一个整数表示最少需要购买的袋数,如果不能买恰好n个苹果则输出-1

输入例子1:

20

输出例子1:

3

解题思路:

动态规划。设dp[i]为恰好买i个苹果的最少袋数,初始化dp[i] = 10000,dp[0] = 0, dp[6] = 1;递推式为dp[i] = min(dp[i-6]+1, dp[i-8]+1)

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            int[] dp = new int[n+1];
            for(int i=0; i<=n; i++)
                dp[i] = 10000;
            dp[0] = 0;
            if(n>=6)
                dp[6] = 1;
            
            for(int i=8; i<=n; i++)
                dp[i] = Math.min(dp[i-6]+1, dp[i-8]+1);
            
            if(dp[n] < 10000)
                System.out.println(dp[n]);
            else
                System.out.println(-1);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值