01背包变题

地IDE。
题目描述
有重量分别为3,5,7公斤的三种货物,和一个载重量为X公斤的箱子(不考虑体积等其它因素,只计算重量)
需要向箱子内装满X公斤的货物,要求使用的货物个数尽可能少(三种货物数量无限)

输入描述:

输入箱子载重量X(1 <= X <= 10000),一个整数。

输出描述:

如果无法装满,输出 -1。
如果可以装满,输出使用货物的总个数。

示例1
输入
复制

4

输出
复制

-1

说明

无法装满

示例2
输入
复制

8

输出
复制

2

说明

使用1个5公斤,1个3公斤货物

import java.util.stream.Stream;       
import java.util.Scanner;
import java.util.Arrays;

public class Main{
    public static void main(String[] args) {
        int MAX = 100000;
        //背包问题 变体
        Scanner sc = new Scanner(System.in);
        int X = sc.nextInt();
        
        int[] dp = new int[X+10];
        Arrays.fill(dp,MAX);
        dp[3] = 1;
        dp[6] = 2;
        dp[5] = 1;
        dp[7] = 1;
        for(int i=8;i<=X;++i) {
            
            dp[i] = min(dp[i-3],dp[i-5],dp[i-7])+1;
        }
        if(dp[X]>=MAX) {
            System.out.println("-1");
        }else {
            System.out.println(dp[X]);
        }
 
    }
    public static int min(int a,int b,int c) {
         //return Stream.of(a,b,c).min(Integer::compareTo).get();     
        return Stream.of(a,b,c).min(Integer::compareTo).get();
    }

  
}
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 终极编程指南 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读