最重要: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的更多相关文章

  1. 在Ubuntu虚拟机上搭建青岛OJ

    源码地址为:https://github.com/QingdaoU/OnlineJudge 可参考的文档为:https://github.com/QingdaoU/OnlineJudgeDeploy/ ...

  2. Comet OJ - Contest #10 C.鱼跃龙门

    传送门 题意: 求最小的\(x\),满足\(\frac{x(x+1)}{2}\% n=0,n\leq 10^{12}\). 多组数据,\(T\leq 100\). 思路: 直接考虑模运算似乎涉及到二次 ...

  3. Comet OJ - Contest #10 鱼跃龙门 exgcd+推导

    考试的时候推出来了,但是忘了 $exgcd$ 咋求,成功爆蛋~ 这里给出一个求最小正整数解的模板: ll solve(ll A,ll B,ll C) { ll x,y,g,b,ans; gcd = e ...

  4. 【JZOJ5439】【NOIP2017提高A组集训10.31】Calculate

    题目 分析 对于\[\sum_{i=1}^{n}\lfloor\dfrac{T-B_i}{A_i}\rfloor\] 我们考虑拆开处理,得到 \[\sum_{i=1}^{n}(\lfloor\dfra ...

  5. 【JZOJ5428】【NOIP2017提高A组集训10.27】查询

    题目 给出一个长度为n的序列a[] 给出q组询问,每组询问形如\(<x,y>\),求a序列的所有区间中,数字x的出现次数与数字y的出现次数相同的区间有多少个. 分析 我们可以维护一个前缀和 ...

  6. 5433. 【NOIP2017提高A组集训10.28】图

    题目描述 Description 有一个n个点A+B条边的无向连通图,有一变量x,每条边的权值都是一个关于x的简单多项式,其中有A条边的权值是k+x,另外B条边的权值是k-x,如果只保留权值形如k+x ...

  7. 5432. 【NOIP2017提高A组集训10.28】三元组

    题目 题目大意 给你\(X+Y+Z\)个三元组\((x_i,y_i,z_i)\). 然后选\(X\)个\(x_i\),选\(Y\)个\(y_i\),选\(Z\)个\(z_i\). 每个三元组只能选择其 ...

  8. [整理]qbxt集训10场考试 大 杂 烩 (后篇)

    前篇 Contest 6 A 两个数,第 \(i\) 轮从较大数(如果相等就是第一个)里减去 \(i\) ,问操作不能进行时两数分别为多少. 首先把大数减到和小数差不多,然后我们会发现接下来两数会轮流 ...

  9. JZOJ 5432. 【NOIP2017提高A组集训10.28】三元组

    题目 有 \(X+Y+Z\) 个三元组 \((x[i],y[i],z[i])\),请你从每个三元组中挑数,并满足以下条件: 1.每个三元组中可以且仅可以选择一个数(即 \(x[i],y[i],z[i] ...

  10. JZOJ 5415. 【NOIP2017提高A组集训10.22】公交运输

    题目 城市中有一条长度为 \(n\) 的道路,每隔 \(1\) 的长度有一个公交车站,编号从 \(0\) 到 \(n\),学校在 \(0\) 号车站的位置.其中每个公交车站(除了 \(n\) 号车站) ...

随机推荐

  1. 从 Windows Forms 到微服务的经验教训

    Photo by Dan Counsell on Unsplash 如果说软件开发中有什么不变的东西,那就是变化. 在 .NET 生态系统中摸爬滚打的这二十年里,我见证了各种框架的起起落落,目睹了容器 ...

  2. KUKA库卡机器人维修

    KUKA库卡机器人作为生产线上的核心设备,一旦出现KUKA机械手故障,将直接影响整个生产线的运行效率.及时的库卡机器人维修工作不仅能够迅速恢复机器人的工作状态,减少生产停滞时间,还能通过预防性维护降低 ...

  3. Docker 容器的数据卷 以及 数据卷容器

    Docker 容器删除后,在容器中产生的数据还在吗? 答案是 不在 Docker 容器和外部机器可以直接交换文件吗? 在没有数据卷的情况下,答案是 不可以 如下图:外部机器:Windows系统(自己的 ...

  4. LangChain大模型框架& Dify低代码 AI 开发平台

    目录 1. LangChain介绍 1.1 架构 1.2 概念 1.3 术语 1.4 LangChain实战 2. LLM 应用开发平台dify 2.1 dify安装 2.2 设置知识库 3. dif ...

  5. Dify 和 Manus 的技术架构差异

    Dify 框架能够部分实现 Manus 的功能效果,但在复杂任务自动化.多代理协作等领域存在技术差距. 一.核心功能对比 1. 任务拆解与执行能力 Dify:支持通过 Agent 模式 进行任务分解, ...

  6. 考勤运行提示‘Length of values (115) does not match length of index (116) >>> ’

    源码 df['餐补'] = money_list 解决思路: 1.分别打印输出两个字段长度 本来以为是每个月的文件格式不一致导致有的文件好用有的文件不好用 经过耐心查看代码 前面的算法统计有一个本应该 ...

  7. 部署sing-box代理服务器绕过付费校园网上网

    解决的问题 学校一般会有2个网络,一个是教学区的免费校园网,一个是寝室楼的付费校园网.如何不交钱也能在寝室楼上网是一个问题. 以及,如果校园网在12点之后断网,如果解决断网问题 sing-box Gi ...

  8. npm淘宝镜像证书过期

    前言 使用 npm 报错: npm ERR! request to https://registry.npm.taobao.org/xxx failed, reason: certificate ha ...

  9. 记CentOs服务器内存使用满的解决办法

    使用的一个应用服务器,weblogic部署,nginx分配,在使用了半个月的时间里,服务器内存达到杀掉服务器进程之后查看被删除但是仍然被应用程序占用的文件列表由于我删掉了日志里所以东西,所以导致后来我 ...

  10. Oracle体系结构和用户管理

    本篇博客将对Oracle的体系结构.存储结构.内存结构和进程结构进行初步介绍,从而从宏观上把握它的物理组成.文件组成和各种进程,对于进一步的了解可以起到很好地作用 一.Oralce体系结构 1.概述 ...