(练习)奇安信2020大数据开发工程师编程题(买口罩)(java)

小明有N元钱去药店买口罩,药店里有6个品牌的口罩,A品牌2个装(2元),B品牌3个装(2元)、C品牌1个装(3元)、D品牌5个装(1元),E品牌4个装(5元),F品牌3个装(2元),由于限购每个品牌最多只能买一个,小明最多能买多少口罩?

 

读完题就会发现是经典0-1背包问题 

 提笔就开始二维做

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int[][] dp  = new int[7][n + 1];
        dp[0][0] = 0;
        int[][] arr = {{2, 2}, {3, 2},{1, 3}, {5, 1}, {4, 5}, {3, 2}};
        for(int i = 1; i <= 6; i ++){
            for(int j = 1; j <= n; j ++){
                if(j >= arr[i - 1][1]){
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - arr[i - 1][1]] + arr[i - 1][0]);
                }else{
                    dp[i][j] = dp[i - 1][j];
                }
            }
        }
        System.out.println(dp[6][n]);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值