java解法

该问题与背包问题类似。给定一个预算 bud 和商品的价格列表 pri,要求我们在这个预算内尽可能购买更多的商品,使得购买的商品的总价值最大。
每个商品只能买一次,每个商品的价格固定,我们需要决定如何分配预算以实现最大化价值。
动态规划思想:

使用动态规划(Dynamic Programming, DP)来解决这个问题。
设 dp[j] 为预算 j 时,能够获得的最大价值。
初始时,dp[0] = 0,表示没有预算时最大价值为0。
对于每个商品,如果当前预算 j 大于等于该商品的价格 i,则可以选择购买该商品,并更新 dp[j] 为:
dp[j]=max(dp[j],dp[j−i]+pri[i−1])
最终,dp[bud] 就是给定预算 bud 下能够获得的最大价值。
代码流程:

读取输入:读取预算和商品价格列表。
动态规划计算最大价值:根据动态规划方法更新 dp 数组。
输出结果:输出在给定预算下的最大值。

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 创建Scanner对象,读取输入
        Scanner in = new Scanner(System.in);

        // 读取预算
        int bud = Integer.parseInt(in.nextLine());
        
        // 读取价格列表并将其转换为整数数组
        Integer[] pri = Arrays.stream(in.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new);

        // 调用计算最大价值的函数并打印结果
        System.out.println(calcMax(bud, pri));
    }

    // 动态规划计算最大价值
    public static int calcMax(int bud, Integer[] pri) {
        // 创建dp数组,dp[j]表示预算为j时可以获得的最大价值
        int[] dp = new int[bud + 1];
        
        // 遍历商品
        int i = 1;
        while (i <= pri.length) {
            // 遍历所有可能的预算值
            int j = 0;
            while (j <= bud) {
                // 如果当前预算大于等于商品的价格
                if (j >= i) {
                    // 更新dp[j]为最大价值
                    dp[j] = Math.max(dp[j], dp[j - i] + pri[i - 1]);
                }
                j++;
            }
            i++;
        }

        // 返回预算为bud时的最大价值
        return dp[bud];
    }
}

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

C++解法

更新中
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

C解法

更新中
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

JS解法

更新中
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

注:本文转载自blog.csdn.net的CodeClimb的文章"https://blog.csdn.net/CodeClimb/article/details/144534229"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!