0-1背包问题复习

RHCA III之路---EX436-1 由于ha这门课有大量命令需要在3个节点上同步执行.如果执行history会出现前面数字,复制多行会有些麻烦.lab环境是nodea,nodeb,nodec 考试环境是node1,node2,node3。就可以快速将历史命令实现可多行复制,当然也可以用awk进行分割,个人喜好随意。技巧只能加快答题速度,对考试得分帮助不大。确认3个红框内容一致,且没报错即可。再执行一个histrory。3个node节点上运行。这样就能1次复制3行。 阅读详情

准备面试,通过做POJ上的题,复习算法知识,做POJ 3624复习了背包相关知识。

看背包九讲时有些实现细节不是很懂,于是就从最直接的实现开始实现0-1背包的动态规划算法,再逐渐写出优化后的解法。
状态转移方程便是:
f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}

直接写出两层循环下的代码,N代表物品的数量,M表示最大背包能放下的最大容积,w[i]表示第i个物品的重量,d[i]表示第i个物品的价值。a[i][j]表示前i个物品放入容量为 j 的背包中获得的最大收益。

for (int i = 1; i <= N ; i ++) {
 for (int j = 0; j <= M ; j ++) {
  if (j - w [i ] >= 0) {
      a[i][j] = Math.max(a[i-1][j],a[i-1][j-w [i]] + d[i]);
   } else{
      a[i][j] = a[i-1][j];
       }
    }
 }

再写出空间优化后的代码,也就是内层循环倒写的写法,f[j]相当于之前的f[i][j]

for (int i = 1; i <= N; i++) {
     for (int j = M; j >= 0; j--) {
    if (j - w[i] >= 0) {
        f[j] = Math.max(f[j], f[j - w[i]] + d[i]);
    }
}

对比两个写法,有几点需要注意:

  1. 第一个写法中的内层循环可以递增也可以递减,第二个则必须递减,递减写法保证第i次循环结束后f[v]中表示的就是我们定义的状态f[i][v],f[i][v]是由f[i-1][v]和f[i-1][v-c[i]]两个子问题递推而来,j的值递减保证在推f[i][v]时(也即在第i次主循环中推f[v]时)能够得到f[i-1][v]和f[i-1][v-c[i]]的值
  2. 第一个写法要加else,第二个不用加else。第二个写法中如果if不成立,f[j]不变,相当于第一个写法中将a[i][j] = a[i-1][j]。
  3. 第一个中的i值必须从1开始,第二个的i值则不要求。
package PackProblem;

import java.util.Scanner;

/**
 * O-1背包,数组长度有误,要开到14000才AC.
 * 5412K,2532MS
 * @author DaiSong
 * @Date 2014年3月2日
 */
public class Poj_3624 {

    static int f[] = new int[15000];

    public static int ZeroOnePack(int d[], int w[], int n, int m) {

         for(int i = 0; i < n; i++) {
            for (int j = m; j >= 0; j--) {
                if (j - w[i] >= 0) {
                    f[j] = Math.max(f[j], f[j - w[i]] + d[i]);
                }
            }
            for (int j = 0; j <= m; j++) {
                System.out.print(f[j] + " ");
            }
            System.out.println();
        }
        return f[m];
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n, m;
        int d[] = new int[15000];
        int w[] = new int[15000];
        n = sc.nextInt();
        m = sc.nextInt();
        for (int i = 0; i < n; i++) {
            w[i] = sc.nextInt();
            d[i] = sc.nextInt();
        }
        System.out.println(ZeroOnePack(d, w, n, m));
    }
}
【文献阅读】使用深度语音后验改进独立于说话者的构音障碍可懂度分类 原文名称:本文探讨了利用DeepSpeech后验概率改进说话人无关的构音障碍可理解性分类方法。作者提出了一个基于DeepSpeech(一种端到端的语音转文本引擎)输出的新特征集,用于评估构音障碍患者的语音可理解性。这些新特征在说话人无关的情况下表现良好,能够更好地处理不同说话人的变异性。背景介绍:数据集:特征提取:实验设置:结果:本文提出的新特征集在说话人无关的构音障碍可理解性分类任务中表现出色,特别是在低可理解性和高可理解性类别上。未来的工作将集中在减少低可理解性和中可理解性类别之间的混淆,以进一步提高系 阅读详情

相关推荐

企查查爬取实战

实战成果完成接口定位、抓包参数拆解、签名逆向、报错修复全流程调试,梳理出企查查多层风控逻辑;最终按照搜索分页规则,规范整理出两页共 20 条结构化企业数据,以标准 JSON 格式本地保存,字段完整、数据排版规范。现存局限平台顶层设备指纹与人机验证风控,纯 requests 网络请求模式无法突破;高频请求还存在账号限流、IP 访问限制风险,爬虫稳定性受平台策略影响较大。技术收获。

czr2026的博客 1130

【算法宇宙——在故事中学算法】背包dp之01背包问题

以故事的形式讲好01背包问题。

霜-哀的博客 470

RK3588 Linux启动优化至亚秒级全链路剖析

本文深入探讨RK3588平台Linux系统启动加速技术,涵盖从BL1/ATF安全固件、U-Boot剪裁到内核精简化等全链路优化方案,实现从上电到用户脚本800ms内完成的实战经验。​​文末提供完整解决方案获取方式​​。由于在 ARMv6 之后引入了 TrustZone 模块, 目前市面上 ARMv7 和 ARMv8 之后的系统都会包含了该模块, 这个模块由 BL1 启动, 且在 ATF(ARM Trust Firmware) 固件中, 既安全世界中引导到 BL33 (UBOOT)的系统。

韩若明溪 1777

动态规划解决01背包问题

一、问题描述:有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和? 二、总体思路:根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满足最优性原理、找大问题与小问题的递推关系式、填表、寻找解组成)找出01背包问题的最优解以及解组成,然后编写代码实现; 三、动态规划的原理及过程:   eg:number=4,capacity=...

Christal_RJ的博客 2546

Hi3516CV610开发板ISP调优实战——从在线调试到参数固化部署全流程

本文详细介绍了Hi3516CV610开发板ISP参数从在线调试到固化部署的全流程。针对调试参数重启丢失的痛点,重点解析了如何从PQTools安全导出参数、进行格式转换与适配,并通过烧录工具或系统更新两种路径将参数永久固化至Flash。最后提供了双重验证与常见问题排查方法,确保调优效果在产品中稳定生效。

weixin_29169505的博客 426

同花顺自动化交易避坑指南:pywinauto实战中验证码识别与界面弹窗处理

本文深入探讨同花顺自动化交易中的关键稳定性问题,重点解决验证码识别与弹窗处理两大难题。通过优化Tesseract OCR、整合打码平台API以及设计pywinauto弹窗监控体系,提供了一套完整的自动化交易解决方案,帮助交易者有效规避资金账户和持仓信息操作中的常见陷阱。

weixin_33734785的博客 488

【算法笔记】01背包问题+完全背包问题(2022-2-3)

动态规划:01背包 + 完全背包

Shad0wLEO的博客 363

对称加密中GCM和CBC俩种加密模式的区别

**CBC(Cipher Block Chaining)** 和 **GCM(Galois/Counter Mode)** 是两种常见的对称加密模式。它们的主要区别体现在加密方式、性能和安全性上。

闲人 1109

NOIP专题复习(一) 基础的背包问题

之所以要走这么一个专题原因也很简单,在下的基础实在是太薄弱了… 所以接下来可能会变成非常基础的题、略有难度的题和模板题并存的东西.. 于是就是这样,就先从背包开始吧(dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]) 滚动数组优化版:dp[i]=max(dp[i],dp[i-w[i]]+v[i])而对于完全背包,dp[i]=max(dp[i],dp[i-

LiRewriter的博客 867

宇树GO2-YOLOv5在Jetson Orin上的部署避坑实践

本文详细记录了在宇树GO2四足机器人搭载的Jetson Orin平台上部署YOLOv5目标检测模型的完整实践过程。文章重点分享了从ARM架构认知、网络连接解决方案、Archiconda环境搭建、PyTorch版本精准匹配到依赖安装与性能验证的核心步骤与避坑指南,旨在帮助开发者高效完成边缘计算环境下的算法部署。

app77的博客 669

AutoSAR系列讲解(入门篇)2.2-SWC的类型

该章讲解了两种SWC的分类,并且映射到实际的工程中应该是具体的什么文件类型

雪云飞星的博客 4万+

【算法复习二】0-1背包问题总结

一 ,问题描述:     有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 所谓01背包,表示每一个物品只有一个,要么装入,要么不装入。 二,解决方案:     考虑使用dp问题 求解,定义一个递归式 opt[i][v] 表示前i个物品,在背包容量大小为v的情况下,最大的装载量。 opt[i][v] = max(op

小田的专栏 3111

R语言线性混合模型(LMM)分析

它将数据表示为固定效应和随机效应的线性组合,其中固定效应表示总体均值的影响,随机效应表示个体间的随机差异。LMM的目标是通过最大似然估计或最小二乘估计来估计模型中的固定效应和随机效应的参数。LMM结合了固定效应和随机效应,能够同时考虑个体间和个体内的变异,并适用于具有相关性的数据。目前在使用LMM的R语言包中,较常用的是lme4和nlme包,它们提供了丰富的函数和工具来拟合和分析线性混合模型。面板数据分析:LMM适用于分析具有面板结构的数据,如经济学中的面板数据或教育研究中的学生评估数据。

走向CTO的路上... 2969

NWPU算法考试复习--0-1背包问题

** 0-1背包问题 ** 描述 需对容量为c 的背包进行装载。从n 个物品中选取装入背包的物品,每件物品i 的重量为wi ,价值为pi 。对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高。 输入 多个测例,每个测例的输入占三行。第一行两个整数:n(n&amp;amp;lt;=10)和c,第二行n个整数分别是w1到wn,第三行n个整数分别是p1到pn。 n 和 c 都等...

qq_42773022的博客 305

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

算法复习周------“动态规划之‘0 1背包问题’”

问题描述:给定n个物品和一个背包,物品i的重量为Wi,价值为Vi,背包的容量为c。求如何选择装入背包的物品使得装入的物品总价值最大。 要解决这个问题,我们要从上到下来解决。我用例题来说明吧。。。(算法这个东西写出来是真的难。。。。) 算法详解: 这里我们直接给出递推方程: 这里的m矩阵中有两个变量M[i][j],其中i表示当前处理的物品为i,j表示当前背包中能...

275

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

代码随想录复习 151反转字符串中的单词242 有效的字母异位词 0-1背包问题

dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i]) //否则,则是在不放与放之间取一个最大值,且如果要放这个物品,那么之前背包的最大值应该是当前背包容量减去该物品的容量,在这个容量之下,i-1个物品的最大价值。if slowindex-1 > 0 && b[slowindex-1] == ' '{ //这里是去除最后末尾的空格,有两种情况第一种是最后的元素是空格,第二种情况是最后的元素不是空格。

be_humbleman的博客 451

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

HDOJ 1712 ACboy needs your help(分组0/1背包)

把同一门考试当成一组,在一门考试里,花的天数和考的成绩分别是组内物品的代价和价值,这样就转化成一个分组的0/1背包的问题。 AC程序: /*HDOJ1712 作者:陈佳润 2013-04-19 */ #include using namespace std; #include #define max(a,b) (a>b?a:b) int groud[105]; int dp[105

淡墨写江山 875

0-1背包问题(C++代码实现)

2021.10.17 复习软考的时候,翻看软件设计师考试32小时通关时发现P143页0-1背包问题答案有误,特此记录一下。 结合算法设计与分析课程所学习到的0-1背包求解方法,特此编写一个c++程序求解该问题。 代码如下: #include <iostream> using namespace std; #define n 5 // 商品数量 #define C 100 // 背包容量 int P[n+1][C+1], Rec[n+1][C+1]; void knapsack(int p[]

m0_47262980的博客 1494

代码随想录算法训练营Day42 | 0-1背包问题,416. 分割等和子集 | Day 13 复习

代码随想录算法训练营Day42 | 0-1背包问题,416. 分割等和子集 | Day 13 复习

weixin_44687153的博客 156

C++实现0-1背包问题 动态规划 非递归

前两天在华为笔试题的时候遇到了这个问题,做完之后发现自己有欠缺,回来赶紧复习一下本文链接https://blog.youkuaiyun.com/qq_34175893/article/details/79832210不说太多了,直接把代码贴出来,任何繁琐的理论都不如代码看着直接,我在代码中进行了详细的注释,保证只要看懂并理解了关键的几句代码及注释,0-1背包问题就变得很简单,原理什么的网上的博客很多,给大家分...

qq_34175893的博客 1653
上一篇: 第一行代码 读后感
下一篇: Java基础知识复习(一)
TaiSung
博客等级 码龄15年 49粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值