青岛oj集训10
最重要:01背包(完全背包)
设dp[i][j]表示前i个物品装进容量为j的背包
分两种情况,要么不要(第一项),要么要(第二项)f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i])
注意,要判断j-w[i]是否为正
完全背包:
f[i][j]=max(f[i-1][j],f[i][j-w[i]]+v[i])
空间优化:
因为上一行用完就不会再用了
每次只会用到上一行的数据
所以只需要保留i-1和i这两行就行
所以考虑滚动数组
原来的数组:
f
| | | | | i=1
| | | | | i=2
| | | | | i=3
……
现在的数组:
f
| | | | | i=1,3,5,…
| | | | | i=2,4,6,…
所以只需要把所有f数组里的"i"变成i%2就行

这种方法很多dp都可以用
那么还有一种方法可以只用一维,但是只有背包能用

观察到01背包(红)在更新f[i][j]的时候需要f[i-1]的值还未被更新,所以想要大的更新了小的没更新,要逆序枚举
而多重背包(蓝)在更新时需要f[i-1]已经更新,所以要正序枚举
P2979
有两种情况
如果没有大奶酪,那么就是最最最最普通的完全背包
因为我们要尽可能多的奶酪被压扁
先枚举上边的大奶酪是哪一种
再把背包大小变成m*5/4-大奶酪高度
再跑完全背包
but
放上大奶酪也不一定就好
所以你要判断一下,把这种情况和最普通的完全进行比较,选最大的
1941
呵呵,绿题我能会就怪了
这是一道背包题,想不到吧
先假设这是一道简单的dp题
定义f[i][j]表示小鸟在(i,j)位置的最小步数
考虑没有柱子的情况
f[i][j]可以从f[i-1][j+y]或f[i-1][j-x]+1 , f[i-1][j-2x]+2……转移过来
如果你真这么做,那么O(nm^2)直接炸
会发现这些方程有点熟悉
f[i-1][j+y]不就是01背包吗?(-变成+了)
f[i-1][j-x]+1 , f[i-1][j-2x]+2……
不就是f[i][j-w[i]]+v[i]完全背包吗?
所以就是完全背包+01背包
柱子呢?
如果f[i][j]这个位置和柱子重合了
那么直接赋值为inf
多重背包
如果把每个都拆开成一个一个的小物品做01背包三层循环O(nms[i])太大了
那么二进制优化
会发现对于任何一个正整数n
找到2^(k-1)< n < 2^k
则n可以写成1+2+4+8+…+2^(k-2)+剩下的差
如40=1+2+4+8+16 + 9
那么一个物品就会被拆成log下取整+1个数
这样就优化多了

分组背包
首先是一堆01
给它分个组,每个组里只能选一个

P1782
呵呵,蓝题,呵呵呵呵哈哈哈
前半部分:标准的多重背包,用二进制优化不然就炸
后半部分:分组背包,枚举X
可行性背包

第0列赋值1,O(nm)
但是会发现里面存的都是0,1
所以可以用bitset优化
bool qwq[5]={1,0,1,1,1};
那么bitset也就是10111
bitset<5> qwq=10111
它可以看做一个二进制数,左边是低位,右边是高位
即11101
对其右移1位:1101
那么bitset就变成1011(所以反了)

这是直接用bool数组O(nm)

注意!!标蓝的>>变成<<
会比直接用bool快64(机器字长)倍
P5020
先将a排个序
那么a1一定在新的货币系统中
那么就可以把所有a1的倍数都删掉
再取最小的(假设是a2)
然后再把能用a1和a2都删掉直到没有
令f[i]表示i能否被新货币表示出来
若枚举到ai为0,则这个就是无法被表示的,就新加入货币系统,更新货币系统
P1537
判断:能否凑出一些弹珠为总价值的一半
多重可行性背包
但是直接跑6*2*10^4*2*10^4肯定过不了
你可以二进制优化O(6*log(n[i])*n)
当然,你可以再进行bitset优化,再快64倍O(6*log(n[i])*n/64)


注意!!!状态转移方程是wi和vi打反了,不然也就没啥变化了
f[i][j]的定义很重要!!
AT_abc364_e [ABC364E] Maximum Glutton
f[i][j][k]表示前i个物品,甜度为j,咸度为k,的最大菜肴
发现答案的值域很小,所以考虑把答案和甜/咸换一下

青岛oj集训10的更多相关文章
- 在Ubuntu虚拟机上搭建青岛OJ
源码地址为:https://github.com/QingdaoU/OnlineJudge 可参考的文档为:https://github.com/QingdaoU/OnlineJudgeDeploy/ ...
- Comet OJ - Contest #10 C.鱼跃龙门
传送门 题意: 求最小的\(x\),满足\(\frac{x(x+1)}{2}\% n=0,n\leq 10^{12}\). 多组数据,\(T\leq 100\). 思路: 直接考虑模运算似乎涉及到二次 ...
- Comet OJ - Contest #10 鱼跃龙门 exgcd+推导
考试的时候推出来了,但是忘了 $exgcd$ 咋求,成功爆蛋~ 这里给出一个求最小正整数解的模板: ll solve(ll A,ll B,ll C) { ll x,y,g,b,ans; gcd = e ...
- 【JZOJ5439】【NOIP2017提高A组集训10.31】Calculate
题目 分析 对于\[\sum_{i=1}^{n}\lfloor\dfrac{T-B_i}{A_i}\rfloor\] 我们考虑拆开处理,得到 \[\sum_{i=1}^{n}(\lfloor\dfra ...
- 【JZOJ5428】【NOIP2017提高A组集训10.27】查询
题目 给出一个长度为n的序列a[] 给出q组询问,每组询问形如\(<x,y>\),求a序列的所有区间中,数字x的出现次数与数字y的出现次数相同的区间有多少个. 分析 我们可以维护一个前缀和 ...
- 5433. 【NOIP2017提高A组集训10.28】图
题目描述 Description 有一个n个点A+B条边的无向连通图,有一变量x,每条边的权值都是一个关于x的简单多项式,其中有A条边的权值是k+x,另外B条边的权值是k-x,如果只保留权值形如k+x ...
- 5432. 【NOIP2017提高A组集训10.28】三元组
题目 题目大意 给你\(X+Y+Z\)个三元组\((x_i,y_i,z_i)\). 然后选\(X\)个\(x_i\),选\(Y\)个\(y_i\),选\(Z\)个\(z_i\). 每个三元组只能选择其 ...
- [整理]qbxt集训10场考试 大 杂 烩 (后篇)
前篇 Contest 6 A 两个数,第 \(i\) 轮从较大数(如果相等就是第一个)里减去 \(i\) ,问操作不能进行时两数分别为多少. 首先把大数减到和小数差不多,然后我们会发现接下来两数会轮流 ...
- JZOJ 5432. 【NOIP2017提高A组集训10.28】三元组
题目 有 \(X+Y+Z\) 个三元组 \((x[i],y[i],z[i])\),请你从每个三元组中挑数,并满足以下条件: 1.每个三元组中可以且仅可以选择一个数(即 \(x[i],y[i],z[i] ...
- JZOJ 5415. 【NOIP2017提高A组集训10.22】公交运输
题目 城市中有一条长度为 \(n\) 的道路,每隔 \(1\) 的长度有一个公交车站,编号从 \(0\) 到 \(n\),学校在 \(0\) 号车站的位置.其中每个公交车站(除了 \(n\) 号车站) ...
随机推荐
- DM SQL关联列 like 优化案例
1.1.sql优化背景 达梦一哥们找我优化条SQL,反馈在DM8数据库执行时间很慢出不来结果, 监控工具显示这条SQL的执行时间需要20多万毫秒,安排. 1.2.慢sql和执行时间 select a. ...
- 我们是如何解决abp身上的几个痛点
大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. abp框架在.net社区是spring一样的存在,用的人也非常多,毫无疑问,它确实 ...
- 微信小程序单击事件与长按事件冲突的解决办法
众所周知,在小程序中,长按事件一松手是会触发单击事件的,而在我们的实际需求中,往往是需要单击事件和长按事件并存的. 然而,小程序却又好像想到了这种情况似的,给了我们一个触摸开始,一个触摸结束 也就是, ...
- QT5笔记:27. MDI应用程序设计
MDI:Multiple Document Interface 多窗口文档界面 例子: MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H # ...
- ADF - [02] 概念
题记部分 001 || 管道和活动 一个数据工厂可以有一个或多个管道(Pipeline).管道是共同执行一项任务的活动的逻辑分组.管道可以包含一组活动(Activity),这些活动引入和清除日志数据, ...
- 有关C++程序设计基础的各种考题解答参考汇总
早先年考研的主考科目正是[算法与数据结构],复习得还算可以.也在当时[百度知道]上回答了许多相关问题,现把他们一起汇总整理一下,供读者参考. [1] 原题目地址:https://zhidao.baid ...
- 使用cy7c68013调试mt9v011 ov7670 摄像头测试 icamera视频采集调试
使用cy7c68013调试mt9v011 ov7670 摄像头测试 icamera视频采集调试 采集底板选用cp601d,原理图参考icamera设计,使用cy7c68013a芯片设计,固件刷ic ...
- FastAPI路由与请求处理全解:手把手打造用户管理系统 🔌
title: FastAPI路由与请求处理全解:手把手打造用户管理系统 date: 2025/3/2 updated: 2025/3/2 author: cmdragon excerpt: 通过咖啡店 ...
- 【 Python 】补全fibersim 导出的xml语法
fibersim导出的xml文件中,node 和mesh部分的标签会缺失.即<R></R>变成了<R/>. 以下python脚本可以自动修正 # ********* ...
- Vue2/Vue3 项目生产环境开启 vue devtools 插件线上调试 vue 组件
说到 vue 项目的调试工具,必然少不了 "vue devtools 插件",此插件就像"手术刀"一样,是开发环境下的一个利器,生产环境一般情况没办法使用. 要 ...