zoukankan      html  css  js  c++  java
  • 数位DP之奥义

    恩是的没错数位DP的奥义就是一个简练的dfs模板

     1 int dfs(int position, int condition, bool boundary) {
     2     if (position < 0) return (condition ?);
     3     if (condition < 0) return 0;
     4     if (!boundary && ~f[position][condition]) return f[position][condition];
     5     int respond = 0;
     6     int top = boundary ? num[position] : 9;
     7     for (int i = 0; i <= top; ++i)
     8         respond += dfs(position - 1, new_s(condition, i), boundary && i == top);
     9     return boundary ? respond : f[position][condition] = respond;
    10 }

    f是记忆化数组 其他看变量名就知道意思了吧

    核心在于return里condition的条件以及new_s(condition, i)的构造方式

    i从0还是1开始计数还要考虑题目里的前缀0条件

    简化版

    int dfs(int pos, int con, bool e) {
        if (pos < 0) return (con ?);
        if (con < 0) return 0;
        if (!e && ~f[pos][con]) return f[pos][con];
        int res = 0;
        int top = e ? num[pos] : 9;
        for (int i = 0; i <= top; ++i)
            res += dfs(pos - 1, new_s(con, i), e && i == top);
        return e ? res : f[pos][con] = res;
    }

    以及血的教训 多数情况dfs出来的f的数据是通用的 不用每次输入都memset掉

    会TLE!!!

    参考资料:http://www.cnblogs.com/jffifa/archive/2012/08/17/2644847.html

  • 相关阅读:
    TTreeView.OnCustomDrawItem
    xe Style
    delphi 加密 XOR
    ReportMachine 自定义代码 画细线
    XE 安装后C盘占用太大,C盘空间清理
    FireFox 书签 缓存 路径设置
    Android 照相
    Android手机与服务器(案例一) webservice
    win10/win7 笔记本 开启虚拟无线 批处理
    Delphi XE6打电话
  • 原文地址:https://www.cnblogs.com/quasar/p/5524375.html
Copyright © 2011-2022 走看看