背包:

消失之物

先直接做一遍,必然对于i,有

for(j=m;j>=w[i];--j)

f[i]+=f[i-w[i]]

所以,如果排除用i做背包的结果,减去这个转移就好了。

memcpy(g,f,sizeof f)

for(j=w[i];j<=m;++j)

g[j]-=g[j-w[i]]

关于i的一行就都有了。

[POI2012]SZA-Cloakroom

又是一个有三个属性的题。

肯定要离线。询问关于m排序,物品按照a排序。

k比较小,n比较小。

f[i]表示,决策到当前这个a为止,凑成和为i的所有方案中,最小的b最大是多少。(为了保证bi>m+s)

这样,每到一个决策点m,就可以利用当前处理的f[k]>m+s即可判断能否实现。

因为保证的是最小的b最大是多少。正确性显然。

怎么处理的三个属性呢?a当做顺序,c当做状态,b当做数值。再加上离线对m排序。然后求最小的b最大是多少,直接把配凑问题转化成判定问题。

复杂度O(1e8)可过。

[HNOI2007]梦幻岛宝珠

bzoj1190 [HNOI2007]梦幻岛宝珠 ( 二进制分组优化背包DP)

分层DP。以b为层。

f[i][j]表示,小于等于j*2^i+(w&(1<<(i-1))的最大价值。

每层就是一个0/1背包。

然后考虑逐层合并出来真正的f[i][j]

从低位往高位合并。

f[i][j]=max(f[i][j],f[i][j-k]+f[i-1][min(1000,2*k+((w>>(i-1))&1)]

意义是:把j拆出来k位,用i-1两倍的k来凑出来,然后为了保证+(w&(1<<(i-1))这个东西,就要保证i-1必要时提供一个1*2^(i-1)

至于对1000取min,是可以的。因为本身就不可能达到,而本身就是一个前缀min,这样找不可能超出。

至于那一步加法也是可以的,f[i][j-k]还只是当前层的,就相当于把当前层取出来一些,再把低位的一些取出来拼凑。

至于f[i][j]弄出来前缀的特点,就不要把f[i][j]初值-inf即可。

具体代码见上面的博客(虽然有错)

树形dp

[SCOI2015]小凸玩密室

厉害的树形dp。

神奇的状态设计。

一些需要考虑的细节。

由于起点不定,所以,填法有两种:

1.填完这个子树后,点某个祖先。

2.填完这个子树后,点某个祖先的兄弟。

dp[i][j][0/1]表示,填完以i为根的子树,再取点第j个祖先/第j个祖先的兄弟的代价。

每个点只能在被点到的时候统计贡献,因为这样才能知道距离。nlogn

其实就是一个对未来的承诺。

因为我们不知道填完这个上一个是哪一个,就不能统计贡献。

所以,干脆,就在填完这个之后,直接枚举下一个是哪一个,然后就把贡献算上即可。真在那里填的话,贡献就已经算好了。

而且,祖先只有logn个,下一个填哪一个的方案数比较少。

然后要处理答案。

发现,当起点固定的话,必然要先点完整个子树,然后点父亲,点兄弟子树,再点爷爷,点叔叔子树。

所以,一路模拟即可。

处理答案的复杂度:nlogn

https://blog.chenqiqian.com/20180608-SCOI2015-room/

基础dp例题整理的更多相关文章

  1. 基础dp

    队友的建议,让我去学一学kuangbin的基础dp,在这里小小的整理总结一下吧. 首先我感觉自己还远远不够称为一个dp选手,一是这些题目还远不够,二是定义状态的经验不足.不过这些题目让我在一定程度上加 ...

  2. 基础DP(初级版)

    本文主要内容为基础DP,内容来源为<算法导论>,总结不易,转载请注明出处. 后续会更新出kuanbin关于基础DP的题目...... 动态规划: 动态规划用于子问题重叠的情况,即不同的子问 ...

  3. SVG.js 基础图形绘制整理(二)

    一.折线 var draw = SVG('svg1').size(300, 300); //画折线 //使用字符串点 // var polyline=draw.polyline('0,0 100,50 ...

  4. hdu 5586 Sum 基础dp

    Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Desc ...

  5. hdu 4055 Number String (基础dp)

    Number String Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  6. 训练指南 UVA - 10917(最短路Dijkstra + 基础DP)

    layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: tr ...

  7. 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP)

    layout: post title: 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP) author: "luowentaoaa" catalog: true ...

  8. 「kuangbin带你飞」专题十二 基础DP

    layout: post title: 「kuangbin带你飞」专题十二 基础DP author: "luowentaoaa" catalog: true tags: mathj ...

  9. M - 基础DP

    M - 基础DP Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descriptio ...

随机推荐

  1. selenium自动化一点记录

    UI自动化 1.webdriver的findElement方法可以查找页面某元素,通常使用方式是通过id和name进行查找 1.By ID根据id进行定位 WebElement element=dri ...

  2. Linux命令应用大词典-第42章 PostgreSQL数据库

    42.1 initdb:初始化PostgreSQL数据库 42.2 pg_ctl:控制PostgreSQL服务 42.3 psql:PostgreSQL交互式客户端工具 42.4 createdb:创 ...

  3. Java开发工程师(Web方向) - 02.Servlet技术 - 第2章.Cookie与Session

    第2章--Cookie与Session Cookie与Session 浏览器输入地址--HTTP请求--Servlet--HTTP响应--浏览器接收 会话(session):打开浏览器,打开一系列页面 ...

  4. android AVD创建

    参数详解:AVD name:是要填写的虚拟机名称,这个自己随便取名就行了,要纯英文和数字组成Device:这里是要选择模拟的设备,一般选择3.2*QVGA(ADP2)(320*480: mdpi)这个 ...

  5. nodejs笔记--与Redis的交互篇(六)

    原文地址:http://www.cnblogs.com/zhongweiv/p/node_redis.html 安装前准备 win64: Install python: http://www.pyth ...

  6. Unicode,UTF-32,UTF-16,UTF-8到底是啥关系?

    编码的目的,就是给抽象的字符赋予一个数值,好在计算机里面表示.常见的ASCII使用8bit给字符编码,但是实际只使用了7bit,最高位没有使用,因此,只能表示128个字符:ISO-8859-1(也叫L ...

  7. Notes of the scrum meeting before publishing(12.19)

    meeting time:18:30~20:30p.m.,December 19th,2013 meeting place:3号公寓一层 attendees: 顾育豪                  ...

  8. 【IdentityServer4文档】- 整体情况

    整体概况 大多数现代应用程序看起来或多或少像这样: 最常见的交互是: 浏览器与 Web 应用程序进行通信 Web 应用程序与 Web API 进行通信(有时是Web应用程序自己发起,有时代表用户发起) ...

  9. 从零讲JAVA ,给你一条 清晰地学习道路!该学什么就学什么!!

    1.计算机基础: 1.1数据机构基础: 主要学习:1.向量,链表,栈,队列和堆,词典.熟悉2.树,二叉搜索树.熟悉3.图,有向图,无向图,基本概念4.二叉搜索A,B,C类熟练,9大排序熟悉.5.树的前 ...

  10. Swift-闭包理解(二)

    简明扼要的闭包表达式 其实Swift已经为我们提供了很多简化的语法,可以让我们保证代码的高可读性和维护性.还用上面的例子来说明,对于  greetPeople 这个全局函数来说,其实只需要使用一次,所 ...