数位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. 【转】在C#中简单的科学计算,包括幂数,指数,对数,Math类

    用Math类进行一些简单的科学计算,包括幂数,指数,对数等的计算: double m,n; m=Math.Exp(0.5); //自然对数e的0.5次方 n=Math.Exp(); //自然对数e的3 ...

  2. Android零基础入门第78节:四大组件的纽带——Intent

    前面学习Activity时己经多次使用了 Intent,当一个Activity需要启动另一个Activity时, 程序并没有直接告诉系统要启动哪个Activity,而是通过Intent来表达自己的意图 ...

  3. 【备忘】WPF基础

    XAML 为了避免生成用户界面(GUI)的代码和基于用户操作执行的代码混合在一起. 名称空间 值得注意的名称空间: xmlns="http://schemas.microsoft.com/w ...

  4. UI设计师必收!同行总结可即刻上手的iOS规范参考

    分享 <关于我> 分享  [中文纪录片]互联网时代                 http://pan.baidu.com/s/1qWkJfcS 分享 <HTML开发MacOSAp ...

  5. C#中比较两个对象的地址是否相同(也是引用计数的问题,和Java一样)

    private void button1_Click(object sender, EventArgs e) {     char[] ch = { 'z', 's', 'w', 'a', 'n',  ...

  6. DUI-分层窗口两种模式(SetLayeredWindowAttributes和UpdateLayeredWindow两种方法各有利弊)

    LayeredWindow提供两种模式: 1.使用SetLayeredWindowAttributes去设置透明度, 完成窗口的统一透明,此时窗口仍然收到PAINT消息, 其他应用跟普通窗口一样. 2 ...

  7. qtablewidget qss加上这个,QHeaderView::section

     qtablewidget  qss加上这个,QHeaderView::section {    color: white;    padding: 4px;    height:24px;    b ...

  8. STL函数static void (* set_malloc_handler(void (*f)()))()与函数指针解析

    在C++ STL的SGI实现版本中,一级空间配置器class __malloc_alloc_template中有一个静态函数的实现如下: static void (*set_malloc_handle ...

  9. flask(三)

    1.cbv的用法 from flask import Flask,views app = Flask(__name__) class Login(views.MethodView ): def get ...

  10. webstrom sass 关于arguments 和 Output paths to refresh 设置

    第一种设置: Arguments:--no-cache --update -t expanded $FileName$:$FileNameWithoutExtension$.css Output pa ...