当前位置: 首页 > news >正文

背包 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.gsyq.cn/news/18849.html

相关文章:

  • 【触想智能】什么是工业平板电脑以及工业平板电脑对制造业具有什么意义
  • 虚树学习笔记
  • OUC《软件工程原理与实践》- 实验2:深度学习基础 - OUC
  • 类型转化
  • 事件驱动重塑 AI 数据链路:阿里云 EventBridge 发布 AI ETL 新范式
  • 我把Excel变成了像素画板!用Python实现图片到单元格的映射
  • 2025 年山东染井吉野樱 / 高杆染井吉野樱花 / 染井吉野樱花小苗厂家推荐:绿影园林的培育技术与全规格供应解析
  • 云存储成本自动优化技术解析
  • SAP 中CONCATENATE 空格的时候,空格不生效
  • OIFHA251011 比赛总结
  • 一种智能调度分布式路径计算解决方案
  • 实用指南:SDN 控制器深度剖析:架构、对比与实践部署
  • Halo RAG!
  • 2025 自动门生产厂家最新推荐榜:权威筛选优质品牌,含选购指南与实力厂家深度解析
  • 医德出诊排班挂号管理系统:医院高效运营与便民服务的智能解决方案
  • 2025 年北京市清理化粪池公司最新推荐排行榜:聚焦高压技术与全城服务的权威甄选朝阳区/丰台区/海淀区/通州区清理化粪池厂家推荐
  • 报表方案Stimulsoft 2025.4 重磅发布!新增AI报表助手、C#脚本支持、全新图表类型等多项功能!
  • Prometheus的Exporter的数据采集机制
  • 2025 年珠三角 / 中山 / 东莞 / 佛山厂房出售公司推荐:中创集团产业生态型厂房的价值与服务解析
  • 拷贝和上传文件,涉及隐私协议
  • 2025储罐厂家,钢衬塑储罐,钢塑复合储罐,化工储罐,防腐储罐,PE储罐,盐酸储罐,硫酸储罐,聚丙烯储罐,不锈钢储罐,次氯酸钠储罐各类型最新推荐榜:品质卓越与技术创新的行业先锋!
  • 2025 年国内标志牌生产厂家最新推荐排行榜:聚焦优质企业助力客户精准选择道路/限速/公路/施工/警示/限高/三角/安全标志牌厂家推荐
  • 在Scala中,如何在泛型类中使用类型参数?
  • Maple 2025 来了!AI 赋能 + 6000 + 命令,破解数学计算、科研与教学痛点
  • 2025 护眼台灯厂家最新推荐榜单:权威解析明可达等五强品牌,护眼参数与选购指南全攻略
  • UPage 正式开源!
  • 2025 年无线耳机源头厂家最新推荐榜单:覆盖头戴式 / 电竞 / 平价 / 电脑 / 游戏多品类且聚焦全产业链与精益制造的权威名录
  • 2025 年最新蓝牙耳机源头厂家口碑推荐榜:含琉璃 X 热销 64 万台企业及各类型高性价比品牌优选运动/真无线/头戴式/骨传导/游戏蓝牙耳机厂家推荐
  • OFD文档落地技术路径研究
  • 人工智能与教育pre