背包dp
[BJOI2019] 排兵布阵 (背包dp与贪心)
题目
小 C 正在玩一款排兵布阵的游戏。在游戏中有
如果一名玩家向第
现在小 C 即将和其他
由于答案可能不唯一,你只需要输出小 C 总分的最大值。
对于每名玩家
题解
设
贪心派出恰好严格大于某一玩家派出的数量的两倍。可以排序预处理出
转移方程即为:
2022牛客OI赛前集训营 Day5 T3 子集 (推式子+背包意义的转换)
题目
给定一个正整数
同时有
给定集合
题解
一眼丁真,应该是个背包,但是这
遇事不决就打表,我们发现了一个规律:
考虑归纳法证明这个东西
首先
若
于是我们证明了我们的猜想,那么这个问题就变成了一个01背包的问题,设
但事实上,仔细想一想我们dp的状态是有冗余的,所以我们考虑更改dp的定义,设
f[0]=ksm(k,n);
for(int i=1;i<=n;++i)
for(int j=M;j>=a[i];--j)
{
f[j]+=f[j-a[i]]*inv%mod;
f[j]%=mod;
}
我们相比原来去除掉了选取个数这一个冗余状态,最后这个东西的时间复杂度是
P4141 消失之物 (对背包转移的理解)
题目
有
对于每个
其中
题解
暴力是
考虑少了某个物品怎么办
考虑在01背包DP时会用到的这个转移
for(int j=m;j>=w[i];--j)
f[j]+=f[j-w[i]];
我们少了i物品就是在原来的基础上少了一次这样的转移,因此
memcpy(g,f,sizeof f);
for(int j=w[i];j<=m;++j)
g[j]-=g[j-w[i]];
处理一下就行
有趣背包问题(交换值域与状态)
题目
初始有
题解
一般的背包问题是设
所以我们考虑设
P2340 [USACO03FALL]Cow Exhibition G (可行性转最优化)
题意
有
题解
一个朴素的想法是,设
设
P1941 [NOIP2014 提高组] 飞扬的小鸟 (背包建模)
题解
设
- 上升为完全背包
- 下降为01背包
- 越界就特判
时间复杂度
P1064 [NOIP2006 提高组] 金明的预算方案 (依赖背包)
题解
大力分讨即可
- 不选,然后去考虑下一个
- 选且只选这个主件
if(j>=v[nw]) f[j]=max(f[j],f[j-v[nw]]+val[nw]);
- 选这个主件,并且选附件1
if(j>=v[nw]+v[v1]) f[j]=max(f[j],f[j-v[nw]-v[v1]]+val[nw]+val[v1]);
- 选这个主件,并且选附件2
if(j>=v[nw]+v[v2]) f[j]=max(f[j],f[j-v[nw]-v[v2]]+val[nw]+val[v2]);
- 选这个主件,并且选附件1和附件2
if(j>=v[nw]+v[v1]+v[v2]) f[j]=max(f[j],f[j-v[nw]-v[v1]-v[v2]]+val[nw]+val[v1]+val[v2]);
时间复杂度同01背包
BZOJ3163 [HEOI2013] 新背包问题(分治+背包)
题目
题解
初始
- 递归的函数到
,维护的dp数组,记录的是除去 外的物品的构成的背
包数组。 时,把 内的物品加入dp数组。
我们这里定义的加入这个物品
当
单调队列优化时复杂度
可行性背包问题(bitset优化)
题目
给出
题解
我们设总体积为
这就是经典的背包问题了,同时可行性的背包问题可以
P1272 重建道路 (树形背包)
题面
给你一颗
题解
设
初始化:
转移
注意我们的状态设计,连接
化学反应(二维背包dp)
题面
给出
题解
设
然后考虑一个物品选还是不选即可
vijos1240 (根据题目性质给背包增维)
题目
-
给你一些房间,告诉你这些房间的容纳人数和价格。
-
安排一定数量的人住到旅馆里,满足:
不同性别的人如果不是夫妻那么不能住一个房间。
一对夫妻如果住在一起,那么房间不能安排其他的人进去哪怕房间
没盛满人
- 你来写一个程序帮助佳佳找到安排这些来参加旅行的人住进旅馆所需要
的最小花费。 :参加旅行的男性人数、 :参加旅行的女性人数、 :旅馆的房间数、 :这些男女中有多少对夫妻、 :每个房子容纳人数和、 :每个房子价格。注意每一个人不是单身就是和他/她唯一的妻子/丈夫一起参加旅行。
题解
首先考虑一件事情:如果有两对及以上夫妻,那么拆开分别住一定不会比他们在一起更劣
因此,要么只有一对夫妻,要么没有
于是,设
P3188 [HNOI2007]梦幻岛宝珠 (通过特殊条件缩小范围)
题面
给你
颗宝石的重量符合
题解
首先,这道题的数据范围及其的吓人,但是注意到
设
难点在于如何合并每一层的背包,设
感性理解一下,这个过程就是高位把它的空间分给了低位,所以要乘
注意到
LOJ6089 小Y的背包计数问题 (剩余系分类与处理不降序列的方法)
题目
小Y有一个大小为
对于第
求小Y把该背包装满的方案数为多少
定义两种不同的方案为:当且仅当至少存在一种物品的使用数量不同。
题解
首先有个显而易见的性质:大小
因此我们的问题变成前
- 对于前
个数
我们可以直接多重背包做吗?
我们发现每次都是从
- 对于后面的数
首先,我们依次选择
- 在最前方加入一个大小为
的数 - 让已经加入的所有数加
这样就可以考虑到所有的不降序列的,具体转移为
其实,
整数划分模型
- 求把
划分成 个正整数的方案数? - 求把
划分成互不相同 个正整数的方案数? - 求把
划分成 个不大于 的互不相同正整数的方案数? - 求把
划分成 个奇数/偶数的方案数?
问题1
设
- 给数
所有的 划分的每个数加 ,即 - 给数
所有的 划分的末尾填上 ,即
理解一下这其实可以讨论到所有的情况
问题2
状态与上一题是一致的,转移如下
因为要限制没有相同的数字,所以填数的时候必须先给其他所有数加上
问题3
转移方程改成
减去多余的部分即可
问题4
设
CF366C Dima and Salad(分数规划问题与背包)
题目
有
题解
根据
CF755F PolandBall and Gifts(贪心+背包)
题目
圣诞节到了,有
有
给定
题解
- 先考虑收不到的人数最多怎么做。我们将
视作是 集合向外映射的一个集合,相应的我们把它们连上边就组成了一个个的环,我们发现,对于一个大小为 的环只要有 个人,环内所有人都不会得到礼物了,因此给每个环都这样贪心地做即可 - 然后考虑收不到的人数最少怎么做。一个显然的贪心是,我们要选一个环就一定要把它选完,因此这变成了选若干个数使得它们的和为
,如果我们将大小相同的环放在一起,那么这个问题就变成了一个多重背包的问题,直接二进制分组做即可
时间复杂度
posted on 2023-07-24 19:53 star_road_xyz 阅读(17) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】