对于一维背包问题,注意区分该问题的下面这三种情况,即至多/恰好/至少,它们的状态转移方程其实是一样的,差异在于初始化。

(1) 体积至多是v时的最小/大值
全部初始化为0,且保证v大于等于0。
代表题目:AcWing 423.采药,其代码如下:

import java.util.*;public class Main{public static void main(String[] args){Scanner sc = new Scanner(System.in);int T = sc.nextInt();int M = sc.nextInt();int[] time = new int[M + 10];int[] value = new int[M + 10];for(int i = 1; i <= M; i ++){time[i] = sc.nextInt();value[i] = sc.nextInt();}// dp:01背包问题int[] f = new int[T + 10];for(int i = 1; i <= M; i ++)for(int j = T; j >= time[i]; j --){f[j] = Math.max(f[j], f[j - time[i]] + value[i]);}System.out.println(f[T]);}
}

(2) 体积恰好是v时的最小/大值
f[0]初始化为0,其余初始化为正/负无穷(分别对应题目问的最小/最大,代表不合法状态,不应该被选取),且保证v大于等于0。
代表题目:LeetCode 322.零钱兑换,其代码如下:

class Solution {public int coinChange(int[] coins, int amount) {// 完全背包问题int n = coins.length;int[] f = new int[amount + 10];// 初始化for(int i = 1; i < f.length; i ++) f[i] = 1 << 25;f[0] = 0;// DP,状态计算for(int i = 1; i <= n; i ++)for(int j = coins[i - 1]; j <= amount; j ++){f[j] = Math.min(f[j], f[j - coins[i - 1]] + 1);}if(f[amount] >= 1 << 25) return -1;else return f[amount];}
}

(3) 体积至少是v时的最小/大值
f[0]初始化为0,其余初始化为正/负无穷(分别对应题目问的最小/最大,代表不合法状态,不应该被选取),无需保证v大于等于0。
代表题目:AcWing 1020.潜水员,其代码如下:

import java.util.*;public class Main{static int M = 30;static int N = 90;static int K = 1010;static int[][] f = new int[M][N];public static void main(String[] args){Scanner sc = new Scanner(System.in);int m = sc.nextInt();int n = sc.nextInt();int k = sc.nextInt();// 初始化for(int i = 0; i < M; i ++)for(int j = 0; j < N; j ++)f[i][j] = 1 << 25;f[0][0] = 0;// dp,状态计算for(int i = 1; i <= k; i ++){int a = sc.nextInt();int b = sc.nextInt();int c = sc.nextInt();for(int j = m; j >= 0; j --)for(int s = n; s >= 0; s --)f[j][s] = Math.min(f[j][s], f[Math.max(0, j - a)][Math.max(0, s - b)] + c);}System.out.println(f[m][n]);}
}

另外,如果是二维背包问题,处理方式也是类似的。

【总结】背包问题的至多/恰好/至少相关推荐

  1. 算法设计与分析(整理)

    2021年春-算法课 我与作业题库的爱恨情仇 我可没记住这个简朴的提交网站:http://47.99.179.148/ 有一个很蠢的坦白,我以为这个简陋的网站,提交时不会允许我们用algorithm库 ...

  2. c++ 判断数学表达式有效性_高考数学大题如何quot;保分quot;?学霸教你六大绝招!...

    高中里有句话,得数学者得高考,此言不虚,清北学生难见数学不足140的,反之,数学140多分的除非特别偏科,大学一般不会差.那么我们怎么"得数学"呢? 针对目前高三的学生:如果你的数 ...

  3. 互斥事件的概念和公式_高中数学典型例题分析与解答:互斥事件

    高中数学典型例题分析与解答:互斥事件 (10页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 互斥事件互斥事件典型例题一典型例题一例例 1 今 ...

  4. 数量关系:高频考点常用解题方法(一)

    请点击↑关注.收藏,本博客免费为你获取精彩知识分享!有惊喜哟!! 数量关系 1.高频考点常用解题方法-代入法 测查报考者理解.把握事物间量化关系和解决数量关系问题的能力,主要涉及数据关系的分析.推理. ...

  5. linux基础: shell————正则表达式基础及sed

    一 什么是正则 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 在linux中,通配符是由shell解释的,而正则表达 ...

  6. shell判断数字大小_shell! shell! shell!

    1.du  df   free  只介绍了大方向,具体想怎么用自行搜索下指令吧. du命令 显示每个文件和目录的磁盘使用空间~~~文件的大小 df命令 命令用于显示目前在 Linux 系统上的文件系统 ...

  7. 图论 公约数 找环和链 BZOJ [NOI2008 假面舞会]

    BZOJ 1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1655  Solved: 798 [Submit] ...

  8. Shell awk文本处理,shell脚本编写

    Shell awk文本处理,shell脚本编写 一:内容包含awk.变量.运算符.if多分支 <a>语法糖: awk [options] 'commands' files option - ...

  9. linux隔一级目录找文件,linux查看文件和子目录

    Q4:linux查找当前目录下所有子目录特定文件类型需要查找的文件内容 1.find [选项] [目录] [条件] [动作] 如果不指定任何目录,find将会查找当前目录.如果 不指定条件,则条件相当 ...

最新文章

  1. 对序列连续计算平均数和方差
  2. 浅谈Android中Lifecycle
  3. 看几道JQuery试题后总结(下篇)
  4. 组态王怎么做超级曲线_鸭肉怎么做?大叔教你红烧鸭块,香气扑鼻,简单易做,超级好吃...
  5. Active Directory PowerShell模块收集AD信息
  6. 数据:哈佛大学新生近五成是富二代!
  7. 方便好用的接口协作工具
  8. Kotlin — 在一个项目中混用 Java 与 Kotlin(混合开发)
  9. Cinesamples CineBrass Descant Horn Mac(号角音色库)
  10. AutoCAD Plant 3d管道设计基础到中高级进阶视频教程
  11. 平衡二叉树例题_平衡二叉树专题
  12. 教你如何在电脑上建一个绝密文件夹
  13. 字符转ASII码以及大小写之间的转换
  14. OBS Studio 27.0.1版本编译
  15. selenium爬取拉勾网
  16. 检测浏览器无痕模式下是否支持localStorage
  17. 如何进行接口测试(一篇学会)
  18. HTML5七夕情人节表白网页(星空萤火虫) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码 css爱心表白
  19. MFC多语言实现的两种方法
  20. 职场七年之痒,如何抉择

热门文章

  1. TCP/IP知识总结面试题之Socket服务
  2. 计算机网络(5)体系结构:计算机网络分层结构
  3. 微信服务器接口配置程序
  4. 安卓桌面壁纸_梅糖桌面安卓手机版下载-梅糖桌面app官方版下载v2.2安卓版
  5. 基于python的管理系统_基于ssm的管理系统_基于python管理系统
  6. Problem Set 2 Hangman Game字谜游戏
  7. 怎么给HTML文件加背景,设置文件夹背景,如何设置文件夹背景颜色
  8. html狙击瞄准特效,如何给视频加特效:制作电影中狙击场景效果 望远镜效果视频...
  9. 互联网开发岗实习及秋招总结
  10. 什么是NETBIOS?