数位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. workerman源码分析之启动过程

    PHP一直以来以草根示人,它简单,易学,被大量应用于web开发,非常可惜的是大部分开发都在简单的增删改查,或者加上pdo,redis等客户端甚至分布式,以及规避语言本身的缺陷.然而这实在太委屈PHP了 ...

  2. 【Linux】samba服务

    samba是一个实现不同操作系统之间文件共享和打印机共享的一种SMB协议的免费软件. ①Samba软件包的安装 使用源安装,在终端中输入如下命令: #sudo apt-get install samb ...

  3. Grokking PyTorch

    原文地址:https://github.com/Kaixhin/grokking-pytorch PyTorch is a flexible deep learning framework that ...

  4. String内存结构

    var s: AnsiString; begin s := '1234567890'; showmessage(s); end; 变量s的内存结构为A8 03 01 00 FF FF FF FF 0A ...

  5. Android零基础入门第81节:Activity数据传递

    在Android开发中,经常要在Activity之间传递数据.前面也学习了Activity和Intent相关基础,接下来一起来学习Activity的数据传递. 一.简介 通过前面的学习知道,Inten ...

  6. DIY Delphi 半透明窗体(2)

    写文章的时候 脑子有点乱 unit uMainForm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics ...

  7. QT---Winsocket获取网关(Gateway) 主机IP等信息

      基于WinPcap库做开发,需要利用到局域网的默认网关地址和Mac地址,但是WinPcap实现获取网关IP地址没有很好的思路,可以知道的是网关的接收和发出的数据包数量一般是比局域网内的各主机要多的 ...

  8. 20 个免费开源的 CSS3 用户界面工具包

    ui.css Metro UI CSS Pure CSS jQuery jKit Solid HTML5/CSS3 UI Kit CSS3 UI Kit Alt CSS3 UI Kit MediaLo ...

  9. Spring如何解决循环引用

    概念 什么是循环引用? 故名思义,多个对象形成环路. 有哪几种循环引用? 在Spring中存在如下几种循环引用,一一举例分析一下 注入循环引用(Set注入 注解注入) package c.q.m; i ...

  10. 前端学习之Bootstrap学习

    一,Bootstrap简介 在前端世界,有个叫Bootstrap的家伙,,是twitter 开源出来的一套前端框架,利用Ta可以快速开发网站界面,它的特点就是比自己从头写简单,直观,方便,快捷,省劲. ...