栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

[AcWing] 423. 采药(C++实现)01背包问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[AcWing] 423. 采药(C++实现)01背包问题

[AcWing] 423. 采药(C++实现)01背包问题
  • 1. 题目
  • 2. 读题(需要重点注意的东西)
  • 3. 解法
  • 4. 可能有帮助的前置习题
  • 5. 所用到的数据结构与算法思想
  • 6. 总结

1. 题目


2. 读题(需要重点注意的东西)

读题:

采每一株草药时间会减少 ===》 体积
每一株草药有自身的价值 ===》 价值

且每一株草药只有选或不选两种情况

即:

时间 ===》 体积
价值 ===》 价值

思路:

将空间优化为二维:滚动数组
优化方式与[AcWing] 2. 01背包问题(C++实现)0-1背包问题模板题相同,在此不再赘述。

3. 解法

---------------------------------------------------解法---------------------------------------------------

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    static int N = 1010;
    static int[] v = new int[N]; // 体积(时间)
    static int[] w = new int[N]; // 价值
    static int[] f = new int[N];
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] s = reader.readLine().split(" ");
        int m = Integer.parseInt(s[0]); // 总体积
        int n = Integer.parseInt(s[1]); // 物品数量
        for(int i = 1;i <= n;i++){
            s = reader.readLine().split(" ");
            v[i] = Integer.parseInt(s[0]);
            w[i] = Integer.parseInt(s[1]);
        }

        for(int i = 1;i <= n;i++)
            for(int j = m;j >= v[i];j--)
                f[j] = Math.max(f[j],f[j-v[i]]+w[i]);

        System.out.println(f[m]);
    }
}


可能存在的问题

4. 可能有帮助的前置习题
  • [AcWing] 2. 01背包问题(C++实现)0-1背包问题模板题
5. 所用到的数据结构与算法思想
  • 动态规划
  • 01背包问题
6. 总结

01背包模型,可以发展为不同的01背包题目

01背包模型的特征:
1. 可以将一个属性看成 价值;
2. 可以将一个属性看作 背包体积;
3. 每种物品只有选或不选两种情况,不能重复选。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/821160.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号