1/16 背包笑传之测测爆

news/2025/1/16 21:55:56/文章来源:https://www.cnblogs.com/basibatuo/p/18675822

1/16 背包笑传之测测爆

成绩(这次真爆了)

题目 P2871 [USACO07DEC] Charm Bracelet S P1049 [NOIP2001 普及组] 装箱问题 P1802 5 倍经验日 P2663 越越的组队 P1510 精卫填海 U524956 宠物小精灵之收服 P2946 [USACO09MAR] Cow Frisbee Team S
分数 82 100 90 50 10 0 10

前置知识(有点长,知识点梳理)

dp

dp的四步法(水字数)

  1. 确定状态
  2. 确定答案
  3. 确定状态转移方程
  4. 确定初始状态和边界

01背包

从名字上就很好理解, \(0\) 代表不选, \(1\) 代表选。

同时对应着dfs中的选和不选问题(驭澄音)。

这种问题一般有3种写法:

  1. 第一种就是最简单并且本人最会的暴搜,只要数据不大,优势在我。
  2. 第二种就是本人最不会的贪心。这里的贪心可贪多个值,比何坤还能贪
  3. (第三种写法在后面)。

接下来我们要用贪心的角度想一下这道题:

  1. 按照重量贪。

    容量10

    物品1 物品2 物品三
    重量 10 6 4
    价值 1 0.1 0.1

    重量贪:物品2+物品3=0.1+0.1=2

    正常:物品1=10

    直接过

  2. 按照价格贪。

    容量10

    物品1 物品2 物品三
    重量 10 6 4
    价值 10 8 4

    价格贪:物品1=10

    正常:物品2+物品3=8+4=12

    也过

  3. 按照性价比贪。

    容量10

    物品1 物品2 物品三
    重量 8 6 4
    价值 10 7 4
    性价比 1.25 0.86 1

    性价比贪:物品1=10

    正常:物品2+物品3=7+4=11

    也过

看得出来,贪心的每一个方法都有hack。

不藏了,我们现在直接拿出我们的dp吧。

温馨提示:

01背包属于多状态dp

时间复杂度: \(O(n*m)\)

空间复杂度: \(O(n*m)\)

题目

P2871 [USACO07DEC] Charm Bracelet S

这道题纯纯滚动背包版子。

滚动:

​ 就意思是指把dp数组降一个维度。

​ 要求就是dp数组只会取上一此算的数据,否则会出现“答案失踪案件”

​ 所以还是先写完正常版本,再写滚动优化

  1. 确定状态:

    pre[j]代表dp[i - 1][j],上一次的价值
    dp[j]代表dp[i][j],这一次的价值
    
  2. 确定答案

    dp[m],最后算出来的数据
    
  3. 确定状态转移方程

    放不下:dp[j] = pre[j];
    放得下:dp[j] = max(pre[j], pre[j - w[i]] + val[i]);
    
  4. 确定初始状态和边界

    dp和pre都为0
    

P1049 [NOIP2001 普及组] 装箱问题

这个比上面那题更简单,最大值问题。

  1. 确定状态:

    dp[i - 1][j]代表上一次的占地空间
    dp[i][j]代表这一次的占地空间
    
  2. 确定答案

    求出最后一次的最大值,用容量减去最大值算出来的剩余空间为答案
    
  3. 确定状态转移方程

    放不下:dp[i][j]=dp[i-1][j];
    放得下:dp[i][j]=max(dp[i][j],dp[i-1][j-w[i]]+w[i]);
    
  4. 确定初始状态和边界

    dp都为0
    

P1802 5 倍经验日

这个就是普通01背包板子加上不取的经验,再乘5被就行了

要开long long!!

要开long long!!

要开long long!!

  1. 确定状态:

    dp[i - 1][j]代表上一次的经验
    dp[i][j]代表这一次的经验
    
  2. 确定答案

    和模板一样,只需要输出最后一次的经验值就可以了(要乘5倍)
    
  3. 确定状态转移方程

    放不下:dp[i][j]=dp[i-1][j]+l[i];
    放得下:dp[i][j]=max(dp[i][j],dp[i-1][j-w[i]]+w[i]);
    
  4. 确定初始状态和边界

    dp都为0
    

P2663 越越的组队

这个跟上面的一样,都是01背包的改版。

就是需要到这求,只需要求一般就可以了。

  1. 确定状态:

    dp[i - 1][j]代表上一次的成绩
    dp[i][j]代表这一次的成绩
    
  2. 确定答案

    和模板一样,只需要输出最后一次的经验值就可以了(要乘5倍)
    
  3. 确定状态转移方程

    放不下:dp[i][j] = dp[i - 1][j];
    放得下:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - a[i]] + a[i]);
    
  4. 确定初始状态和边界

    dp全都为0
    

P1510 精卫填海

这道题可以用两种方法来解。

这道题十分杂,像“大乱炖”

方法一:按照最小值问题处理

  1. 确定状态:

    dp[j]=dp[i][j];
    pre[j]=dp[i-1][j];
    
  2. 确定答案

    求出最后一次的最小值,然后判断,小于c就输出Impossible,大于c就输出c-ans
    
  3. 确定状态转移方程

    放不下:dp[i][j] = dp[j] = pre[j];
    放得下:dp[j] = min(pre[j], pre[j - w[i]] + val[i]);
    
  4. 确定初始状态和边界

    都要赋值为最大值,出来[0][0]赋值为0。
    最大边界为v+n的最大范围
    

方法二:按照最大值问题处理

  1. 确定状态:

    dp[j]=dp[i][j];
    pre[j]=dp[i-1][j];
    
  2. 确定答案

    求出每一次的最大值,然后判断是否等于-1,等于就输出Impossible,不等于就输出ans
    
  3. 确定状态转移方程

    放不下:dp[j] = pre[j];
    放得下:dp[j] = max(pre[j], v[i] + pre[j - w[i]]);
    
  4. 确定初始状态和边界

    dp都为0,不需要赋值
    

U524956 宠物小精灵之收服

经典的两个限制条件,求解最大值的问题。

  1. 确定状态:

    dp[j][k]=dp[i][j][k];
    pre[j]=dp[i-1][j][k];
    
  2. 确定答案

    最后一次和最后一个的值相比,然后判断是否等于,等于就输出。
    
  3. 确定状态转移方程

    放不下:dp[j][w] = pre[j][w];
    放得下:dp[j][w] = max(pre[j][w], pre[j - v1[i]][w - v2[i]] + 1);
    
  4. 确定初始状态和边界

    dp不用赋值。
    

最后一题

没写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/870314.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字节跳动发布开源 Lip Sync AI 模型,视频换声对口型超轻松!

ByteDance新开源模型LatentSync,视频换声对口型超轻松! 阅读时长:9分钟 论文地址ByteDance新开源模型LatentSync,视频换声对口型超轻松!阅读时长:9分钟 论文地址: https://arxiv.org/pdf/2412.09262 发布时间:2025年1月8日字节跳动最近推出了LatentSync,这是一款全新的…

MobaXterm(远程终极工具箱) v24.4汉化专业版

MobaXterm是一款集多种远程功能于一身的工具,它通过支持SSH、Telnet、RDP、VNC等协议,让用户能够轻松远程连接至不同操作系统,如Linux、Unix和Windows。此外,它还具备文件传输功能,支持SCP、SFTP、FTP协议,方便用户在本地与远程设备间传输文件。关键特性图形界面支持:可…

https证书一键自动续期,帮你解放90天限制

前言 前几天网站证书到期,发觉证书颁发每次只能90天有效期,这谁能忍受,于是乎发觉网上有免费的一键续期脚本,真正解放我们的双手。项目如下acme.sh。 期间由于"墙"的原因,踩了很多的坑,此文记录一下踩坑的过程,同时也帮助我们"墙内"的程序员,不需要…

对rpc长连接与短连接的思考

RPC项目中长连接和短连接各有优劣,长连接适用于少量客户端,提高效率;短连接则更适合大量客户端,避免服务器过载。结合L4和L7负载均衡,合理选择连接方式,提升系统性能和稳定性。对rpc长连接与短连接的思考 对于rpc项目,在接受大佬指导的时候曾问过对于长连接和短连接是如…

【Windows攻防】通过代码研究空字节和无文件方式注册表隐藏技术

这篇文章收录于《取证实录》第四季中。 注册表隐藏技术通常用于恶意软件、后门程序或攻击者企图在系统中保持隐蔽,绕过安全检查和防御系统。 常见的隐藏技术有:使用非法字符隐藏注册表项(如PlugX、TDL4/Alureon(Rootkit))、利用默认键值(空字符串)隐藏(如Adwind RAT)…

DVWA靶场学习

暴力破解Brute Force low 输入密码就正常抓包放字典破解得了uploading-image-528180.png medium 同样的操作发现响应速度变慢了,但是还是能暴力破解,不多说了。 uploading-image-408161.png 部分源码解读 $user = $_GET[username]; $user = ((isset($GLOBALS["___mysqli…

推荐几个不错的 Linux 服务器管理工具

前言 选择一款好的 Linux 服务器管理工具能够极大地提高运维效率,保障业务连续性。今天大姚给大家分享3款不错的 Linux 服务器管理工具,希望可以帮助到有需要的同学。 1Panel 1Panel是新一代的 Linux 服务器运维管理面板,旨在通过现代化的 Web 界面帮助用户轻松管理 Linux 服…

学习进度笔记⑩

Tensorflow线性回归 源代码:import tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltimport osos.environ["CUDA_VISIBLE_DEVICES"]="0"#设置训练参数,learning_rate=0.01,training_epochs=1000,display_step=50learning_rate=0.01…

学习进度笔记⑨

tensorflow基本操作(类似numpy) 源代码import tensorflow as tf import os os.environ["CUDA_VISIBLE_DEVICES"]="0" #构造计算图,创建两个常量节点a,b,值分别为2,3 a=tf.constant(2) b=tf.constant(3) #创建一个Session会话对象,调用run方法,运行…

利用AI大模型实现个性化视频配音

最近,作者决定拍摄短视频分享AI技术的应用,并遇到了配音问题。由于家中环境嘈杂且设备不够专业,作者尝试了机器配音,但效果不佳。作者转而想到AI大模型支持语音识别,于是开始寻找语音合成模型。最终在阿里云百炼平台上找到了通义千问-语音合成CosyVoice大模型,多个音色都…

【取证工具】Magnet AXIOM中文绿色版(更新8.4)

Magnet AXIOM取证工具介绍 Magnet AXIOM 是一款功能强大的数字取证工具,专为法律执行人员、调查员和安全专家设计,用于从各种数字设备中提取、分析和报告证据。AXIOM 提供了全面的取证支持,能够从电脑、移动设备、云端服务以及物联网设备中收集并分析数据。多平台支持 Magne…

介绍1个简单好用的英文文本翻转网站,关键还免费不用登录

输入英文,会 生成对应的翻转、反向、镜像、𝕆𝕦𝕥𝕝𝕚𝕟𝕖 𝔽𝕠𝕟𝕥、𝓒𝓾𝓻𝓼𝓲𝓿𝓮 𝓛𝓮𝓽𝓽𝓮𝓻𝓼的文本可以用于生成密码,聊天时发消息,猜字符的场景,欢迎使用和访问,简单免费,无需登录 比如你想她啦,不好意思说…