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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/majichen95/article/details/89174465

小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供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);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/majichen95/article/details/89174465