数位dp
ThreeWater-
这个作者很懒,什么都没留下…
展开
-
数位DP
dfs求[0,n]有多少个符合的,先把n换成数位形式。 pos:现在处理到哪一位。 s:搜索到目前为止,之前的状态 limit:是否到达边界,如果没到这一位只取到9,否则只能取到bit[pos]。 z:前导0标记,也就是是否前面的都是0,有些情况需要特殊判断。 一般情况下dp数组开二维,dp[cur][s]为e和z都为0的情况,因为e和z都为0的情况比较多。 当原创 2016-09-09 18:47:39 · 273 阅读 · 0 评论 -
数位dp,hdu5898
includeincludeincludeincludeincludeincludeincludeincludeusing namespace std; typedef long long ll; int bit[20]; ll dp[20][20][20]; ll dfs(int pos,ll cn1,ll cn2,int lim,int z) { if(pos==-1)原创 2016-09-19 09:47:47 · 210 阅读 · 0 评论 -
spoj10606 数位dp
define c(x) (x==0?1:x==1?2:1) define o(x) (x==0?1:x==1?1:0) define p(x) (x==0?1:x==1?0:1) 这三个地方的时候需要(….) ,因为define定义就在下文的c(x)处直接替换,这样会导致优先级的错误。#include <cstdio> #include <cstring> #include <iostrea原创 2016-09-20 19:44:26 · 391 阅读 · 0 评论 -
poj3252 数位dp
将原本10进制的数位,改成2进制的数位转移就好了#include <cstdio> #include <cstring> #include <iostream> using namespace std; typedef long long ll; ll dp[35][35][35]; int bit[12]; ll dfs(int pos,int cn0,int cn1,int lim,int z)原创 2016-09-20 23:57:28 · 440 阅读 · 0 评论