数位dp学习记

by scmmm

开始日期
2019/7/17
前言

状压dp感觉很好理解(本质接近于爆搜但是又有广搜的感觉),综合了dp的高效性(至少比dfs,bfs优),又能解决普通dp难搞定的问题(例如旅行商问题),又能体验到空间利用的高效性。

Level 1.模板题
[洛谷] P1896 [SCOI2005]互不侵犯

state 指的是每一行的状态

king 指的是这种情况下国王的个数
难度★★,很好的一个入门题,dp部分:

    for(i=1;i<=p;i++)
    {
        if(king[i]<=m) f[1][i][king[i]]=1;
    }
    for(i=2;i<=n;i++)
    for(j=1;j<=p;j++)
    for(k=1;k<=p;k++)
    {
        if(state[j]&state[k]) continue;
        if((state[j]<<1)&state[k]) continue;
        if((state[j]>>1)&state[k]) continue;
        for(l=1;l<=m;l++)
        {
            if(king[k]+l>m) continue;
            f[i][k][king[k]+l]+=f[i-1][j][l];
        }
    }

}
P2704 [NOI2001]炮兵阵地

一道考察空间利用的好题,优化方案两个:

1.预处理好每行存在的方案(最大60个),然后f[110,65,65]不会爆空间

2.使用滚动数组,第一行位置1,第二行2,第三行0 结论 第i行为(i+3)%3 (+3是为了防止之后f[i-1]时出现负数)

对于1.特别注意当前状态是state[i,j]而非j(我在这里被卡了好久)

难度★★★,对暴力和预处理有个更好的认识,dp部分:

for(i=1;i<=p[1];i++)
for(j=1;j<=p[2];j++)
{
    if(state[1][i]&state[2][j]) continue;
    int u=state[2][j],looker=0;
    while(u) looker+=u%2,u=u>>1;
    f[2][i][j]=max(f[2][i][j],f[1][0][i]+looker);
}
for(i=3;i<=n;i++)
{
    for(j=1;j<=p[i];j++)
    for(l=1;l<=p[i-1];l++)
    {
        if(state[i-1][l]&state[i][j]) continue;
        for(k=1;k<=p[i-2];k++)
        {
            if(state[i-1][l]&state[i-2][k]) continue;
            if(state[i][j]&state[i-2][k]) continue;
            int u=state[i][j],looker=0;
            while(u) looker+=u%2,u=u>>1;
            f[i][l][j]=max(f[i-1][k][l]+looker,f[i][l][j]);
        }
    }
}

MMM 数位dp学习记的更多相关文章

  1. MMM 状压dp学习记

    状压dp学习记 by scmmm 开始日期 2019/7/17 前言 状压dp感觉很好理解(本质接近于爆搜但是又有广搜的感觉),综合了dp的高效性(至少比dfs,bfs优),又能解决普通dp难搞定的问 ...

  2. 数位DP学习笔记

    数位DP学习笔记 什么是数位DP? 数位DP比较经典的题目是在数字Li和Ri之间求有多少个满足X性质的数,显然对于所有的题目都可以这样得到一些暴力的分数 我们称之为朴素算法: for(int i=l_ ...

  3. 数位DP 学习笔记

    前言:鸣谢https://www.luogu.com.cn/blog/virus2017/shuweidp.感谢大佬orz ----------------------------- [引入] 首先要 ...

  4. FZU 2113(数位dp)

    题目连接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=38054 题意:求区间[a,b]中包含'1'的个数. 分析:数位dp ...

  5. [暑假集训--数位dp]LightOj1205 Palindromic Numbers

    A palindromic number or numeral palindrome is a 'symmetrical' number like 16461 that remains the sam ...

  6. [暑假集训--数位dp]hdu3709 Balanced Number

    A balanced number is a non-negative integer that can be balanced if a pivot is placed at some digit. ...

  7. [暑假集训--数位dp]hdu2089 不要62

    杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍, ...

  8. 数位dp浅谈(hdu3555)

    数位dp简介: 数位dp常用于求区间内某些特殊(常关于数字各个数位上的值)数字(比如要求数字含62,49): 常用解法: 数位dp常用记忆化搜索或递推来实现: 由于记忆化搜索比较好写再加上博主比较蒟, ...

  9. [学习笔记] 数位DP的dfs写法

    跟着洛谷日报走,算法习题全都有! 嗯,没错,这次我也是看了洛谷日报的第84期才学会这种算法的,也感谢Mathison大佬,素不相识,却写了一长篇文章来帮助我学习这个算法. 算法思路: 感觉dfs版的数 ...

随机推荐

  1. LINQ查询表达式---------where子句

    LINQ查询表达式---------where子句 where 子句用在查询表达式中,用于指定将在查询表达式中返回数据源中的哪些元素. 它将一个布尔条件(“谓词”)应用于每个源元素(由范围变量引用), ...

  2. List.Sort() 小小技巧--- 从大到小排列

    List.sort() 默认的情况下是从小到大的排列. 例如: List<int> list = new List<int>();             list.Add(- ...

  3. PRML Chapter2

    参考文献:PRML2 参数方法和非参数方法 机器学习上的方法分为参数方法(根据先验知识假定模型服从某种分布,然后利用训练集估计出模型参数,也就弄清楚了整个模型,例如感知器)和非参数方法(基于记忆训练集 ...

  4. HTTP通信过程原理

    HTTP协议 通信过程介绍 HTTP协议介绍 Http(Hypertext Transfer Protocol)超文本传输协议. Http是应用层协议,当你上网浏览网页的时候,浏览器和服务器之间就会通 ...

  5. 获取其他进程中StatusBar的文本

    (*// 标题:获取其他进程中StatusBar的文本 说明:Window2000+Delphi6调试通过 设计:Zswang 支持:wjhu111@21cn.com 日期:2005-02-22 // ...

  6. Codility----OddOccurrencesInArray

    Task description A non-empty zero-indexed array A consisting of N integers is given. The array conta ...

  7. JavaScript规定了几种语言类型?

    JavaScript中的每一个值都有它自己的类型,JavaScript规定了七种语言类型: 1.Undefined 2.Null 3.Boolean 4.String 5.Number 6.Symbo ...

  8. 304902阿里巴巴Java开发手册1.4.0

    转自官网 前言 <阿里巴巴Java开发手册>是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,系统化地整理成册,回馈给广大开发者.现代软件行业的高速 ...

  9. 3023Java_控制语句

    控制语句 0.前定义 语句块(有时叫做复合语句),是用花括号扩起的任意数量的简单Java语句. 块确定了局部变量的作用域.块中的程序代码,作为一个整体,是要被一起执行的. 块可以被嵌套在另一个块中,但 ...

  10. ZooKeeper学习第七期--ZooKeeper一致性原理(转)

    转载来源:https://www.cnblogs.com/sunddenly/p/4138580.html 一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过Zo ...