背包 dp 历年真题:做题记录

整理了 NOIP 与某些省份省选的背包题。

NOIP 的背包题

[NOIP 2006 提高组] 金明的预算方案

树形背包似乎也是可做的,但是由于最多有两个附件,并且是分为两类,也就是附件不会再有附件,这个问题就成了最简单的背包问题了。

我们对于所有主件跑背包,在决策中分类讨论只买主件,买一个附件,都买的最少一种,最多四种情况就行了。

为什么是绿?

代码↓

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MN=1e5+115;
int w[MN][3], v[MN][3], dp[MN];
int n, m;
signed main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin>>n>>m;for(int i=1; i<=m; ++i){int rv, rw, type;cin>>rv>>rw>>type;if(type==0){w[i][0]=rw;v[i][0]=rv;}else{if(w[type][1]==0){w[type][1]=rw;v[type][1]=rv;}else{w[type][2]=rw;v[type][2]=rv;}}}for(int i=1; i<=m; ++i){for(int j=n; j>=0; --j){//买主if(j-v[i][0]>=0){dp[j]=max(dp[j],dp[j-v[i][0]]+v[i][0]*w[i][0]);}//买主和1if(j-v[i][0]-v[i][1]>=0){dp[j]=max(dp[j],dp[j-v[i][0]-v[i][1]]+v[i][0]*w[i][0]+v[i][1]*w[i][1]);}//买主和2if(j-v[i][0]-v[i][2]>=0){dp[j]=max(dp[j],dp[j-v[i][0]-v[i][2]]+v[i][0]*w[i][0]+v[i][2]*w[i][2]);}//买主和1和2if(j-v[i][0]-v[i][1]-v[i][2]>=0){dp[j]=max(dp[j],dp[j-v[i][0]-v[i][1]-v[i][2]]+v[i][0]*w[i][0]+v[i][1]*w[i][1]+v[i][2]*w[i][2]);}}}int ans=0;for(int i=0; i<=n; ++i){ans=max(ans,dp[i]);}cout<<ans<<'\n';return 0;
}

[NOIP 2014 提高组] 飞扬的小鸟

提高组里边三个背包中最神经病的,一大堆细节,恶心死我了。

首先正常的 \(O(n^3)\) 级别的 dp 是非常好想的,可以拿到 70pts。

但是这个样子显然是不行的,考虑优化。

发现可以抽象成对于每一个横坐标做一次只有一个物品的完全背包,特殊处理一下上边界,之后在处理向下的情况,优化成功。

和 AI 一起调半天......

代码↓

点击查看代码
#include <bits/stdc++.h>
using namespace std;
int n, m, k, down[10100], up[10100];
int x[10100], y[10100];
int dp[10100][1010], sum[10100];
bool pip[10100];
void Read(){cin>>n>>m>>k;for(int i=0; i<=n; ++i) down[i]=1, up[i]=m+1;for(int i=0; i<n; ++i) cin>>x[i]>>y[i];for(int i=1; i<=k; ++i){int pos, hg, lw; cin>>pos>>lw>>hg;down[pos]=lw+1; up[pos]=hg-1;sum[pos]++; pip[pos]=true;}for(int i=1; i<=n; ++i) sum[i]+=sum[i-1];
}
void Dp(){memset(dp,0x3f,sizeof(dp));for(int i=1; i<=m; ++i){dp[0][i]=0;}//以上是初始化for(int i=1; i<=n; ++i){for(int j=x[i-1]+1; j<=m; ++j){dp[i][j]=min(dp[i][j],dp[i-1][j-x[i-1]]+1);dp[i][j]=min(dp[i][j],dp[i][j-x[i-1]]+1);}for(int j=m-x[i-1]; j<=m; ++j){dp[i][m]=min(dp[i][m],dp[i-1][j]+1);dp[i][m]=min(dp[i][m],dp[i][j]+1);}for(int j=1; j<=m-y[i-1]; ++j){dp[i][j]=min(dp[i][j],dp[i-1][j+y[i-1]]);}for(int j=0; j<down[i]; ++j) dp[i][j]=0x3f3f3f3f;for(int j=up[i]+1; j<=m; ++j) dp[i][j]=0x3f3f3f3f;}
}
void Getans(){int ans=0x3f3f3f3f;for(int i=down[n]; i<=up[n]; ++i){ans=min(ans,dp[n][i]);}if(ans!=0x3f3f3f3f){cout<<1<<'\n'<<ans<<'\n';}else{cout<<0<<'\n';for(int i=n-1; i>=0; --i){for(int j=1; j<=m; ++j){if(dp[i][j]<0x3f3f3f3f){cout<<sum[i]<<'\n';return;}}}cout<<0<<'\n';}
}
int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);Read(); Dp(); Getans();return 0;
}

[NOIP 2018 提高组] 货币系统

矛盾是复杂的,问题是简单的。

我们似乎没有办法直接确认更好的货币系统,那么换个思路,我们可以尝试去清除不需要的面值。

什么面值是不需要的?就是能被别的给表示出来的。

跑计数背包就行的。

代码↓

点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int MN=55555;
int dp[MN], n, a[MN];
int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int T; cin>>T; while(T--){memset(dp,0,sizeof(dp));cin>>n; for(int i=1; i<=n; ++i) cin>>a[i];for(int i=1; i<=n; ++i) dp[a[i]]=1;for(int i=1; i<=n; ++i){for(int j=a[i]; j<MN; ++j){dp[j]+=dp[j-a[i]];}}int ans=0;for(int i=1; i<=n; ++i){ans+=(dp[a[i]]==1);}cout<<ans<<'\n';}return 0;
}

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

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

相关文章

【触想智能】什么是工业平板电脑以及工业平板电脑对制造业具有什么意义

随着技术的不断进步,工业平板电脑正逐渐成为了现代制造业的重要工具。它们与传统消费级平板电脑相比,具备更强大的功能和更强的可靠性,能够在恶劣的工作环境中使用,并满足制造业中特定的应用需求。触想工业平板电脑…

2025 年国内无尘车间源头厂家最新推荐排行榜:聚焦无菌洁净领域优选企业助力企业精准选型万级/十万级/洁净/食品厂/千级无尘车间厂家推荐

在半导体、微电子、GMP 制药等关键行业中,无尘车间的洁净度与稳定性直接决定产品质量,是企业生产的核心保障。当前市场上无尘车间厂家数量繁杂,部分企业存在技术不成熟、服务体系不完善等问题,导致企业在选择合作方…

高效工作,五步工作法

高效工作,五步工作法1、第一步质疑所有需求2、第二步删除不必要的流程何部件3、第二步优化或简化它4、第四步任何给定的事物,都能加速5、第五步一切都自动化

虚树学习笔记

虚树好久没更学习笔记了。 算法简介 通常情况下,如果是对树上单点的询问,我们是用不到树上的所有点的。 换句话说,如果我们树上能用到的节点非常少,那我们就可以避免遍历整棵树,从而降低复杂度。 下面用一个题说。…

市场营销:

市场营销:1、一些管理措施就是对营销服务的营销和营销的执行力。1、营销的重要性与课程定位营销是企业围绕其利润和价值实现而展开的:客户分析、市场细分、营销定位、产品研发、品牌及品牌传播、宣传策划、促销、销售…

Python3开发敏感词过滤程序底层逻辑记录

Python3开发敏感词过滤程序底层逻辑记录 按要求开发敏感词语过滤程序: 提示用户输入评论内容, 如果用户输入的内容中包含特殊的字符: 敏感词列表 li = ["马化腾", "马云", "李彦宏",…

OUC《软件工程原理与实践》- 实验2:深度学习基础 - OUC

实验2:深度学习基础 姓名:qhb 学号: 姓名和学号?本实验属于哪门课程? 中国海洋大学25秋《软件工程原理与实践》实验名称? 实验2:深度学习基础博客链接: 选做实验内容 代码练习 pytorch练习 练习过程和结果如下…

类型转化

数据类型转换规则 低类型向高类型转换为自动转换; 高类型向低类型转换需要强制转换;强制转换形式为(转换后的数据类型)数字/变量名; 数据类型从低到高排序为 char、byte、short->int->long->float->d…

【IEEE出版】第五届电子信息工程与计算机技术国际学术会议(EIECT 2025)

第五届电子信息工程与计算机技术国际学术会议(EIECT 2025)将于 2025年10月24-26日在中国江门举行。【往届均已成功见刊、检索,快至会后4个月检索!】 【五邑大学主办,EIECT 2025已上线五邑大学电子与信息工程学院官…

【AP出版】第七届文学、艺术与人文发展国际学术会议(ICLAHD 2025)

第七届文学、艺术与人文发展国际学术会议(ICLAHD 2025)定于2025年10月24日至26日在中国郑州(郑州大学)隆重举行。【高校举办,多单位联合协办,认可度高 | 组委会优质,大咖汇报】 【论文高录用率,专家严格审核,…

事件驱动重塑 AI 数据链路:阿里云 EventBridge 发布 AI ETL 新范式

本文整理自 2025 年云栖大会阿里云智能集团产品专家陈涛、阿里云智能集团飞天实验室资深产品专家徐志远带来的主题演讲《EventBridge for AI ETL 全新发布,事件驱动重塑 AI 应用数据全链路》作者:陈涛、徐志远 本文整…

详细介绍:腾讯混元 3D 系列两大模型正式于 GitCode 开源:首个原生3D部件生成+多条件控制模型免费开放

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

我把Excel变成了像素画板!用Python实现图片到单元格的映射

这篇文章介绍了一个用Python将图片转换为Excel像素画的工具。通过OpenCV读取图片像素值,使用openpyxl在Excel单元格填充对应颜色,实现图片到Excel的映射。工具包含GUI界面,支持图片预览和进度显示,默认将图片缩放至…

如何通过内核版本检查判断FreeBSD是否需要重启

本文详细介绍如何通过命令行、Shell脚本和Ansible剧本检查FreeBSD系统的内核版本,判断系统是否需要重启以应用内核更新,确保系统安全稳定运行。如何通过内核版本检查判断FreeBSD是否需要重启 保持FreeBSD服务器或工作…

2025 年山东染井吉野樱 / 高杆染井吉野樱花 / 染井吉野樱花小苗厂家推荐:绿影园林的培育技术与全规格供应解析

2025 年,“樱花经济” 成为文旅与绿化产业融合发展的核心增长点,预计未来五到十年产业规模将达千亿级。全国樱花苗木种植已超千万株,生产面积达 60 万余亩,樱花专类景区数量突破 100 个,武汉、福州等 “樱花城市”…

C#中关于InvokeRequired 属性 与Invoke方法

原文链接:https://blog.csdn.net/Pei_hua100/article/details/107353455 C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的…

云存储成本自动优化技术解析

本文介绍了一家初创公司开发的自主云存储优化引擎技术,该技术能实时自动调整存储容量,无需代码更改即可降低云存储成本,并兼容主流云存储环境,为AI等数据密集型行业提供高效存储解决方案。云存储优化初创公司获200…

MZOI 20251011【CSP-】模拟 T2 序列区间

好题集第四篇。题意 给一个长度为 $n$ 的正整数序列 $a$ 和一个常数 $k$,求 $a$ 中有多少对 $(l,r)$ 满足 $\frac{\prod_{i=l}^{r}}{\sum_{i=l}^{r}}=k$。 这里用 \(mina\) 表示数组中的最小值,用 \(maxa\) 表示数组…

完整教程:后端进阶-性能优化

完整教程:后端进阶-性能优化2025-10-11 15:07 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important…

SAP 中CONCATENATE 空格的时候,空格不生效

CONCATENATE lv_matnr lv_maktx INTO lv_text.会发现lv_text变量中没有空格,是因为lv_text是char类型,将lv_text改成string类型就没有这种问题了。