蓝桥杯国赛题2022

在这里插入图片描述
首先这个题应该是一个01背包,背包容量为2022,有2022个物品,第i个物品的体积为i,只不过这里有两个限制条件,一个限制条件是和为2022,另一个限制条件为10个数,两个限制条件那就把加一维,加一维的遍历顺序还是逆序的,整体逆序遍历,转移方程为dp[i][j] = dp[i][j] + dp[i-1][j-k]; 这里k为体积为k;
这里解释一下,不管01背包怎么变,是几维的都要逆序遍历,如果正序遍历无法保证这个数字只使用一次。
还有一种确定方式就是这几个数的数是无序的。如果有一定顺序那就一定不能用01背包。

package com.js.datastructure.recursion.蓝桥.国特训练营.动态规划背包;

public class 背包01_2022 {
    public static void main(String[] args) {
        long[][] dp = new long[11][2023];
        dp[0][0] = 1;

        //01背包就是要
        for (int i = 1; i < 2022; i++) {
            for (int j = 10; j >= 1; j--) {
                for (int k = 0; k < 2023; k++) {
                    if(k-i>=0){
                        dp[j][k] = dp[j][k] + dp[j-1][k-i];
                    }
                }
            }
        }
        System.out.println(dp[10][2022]);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值