hdu 2089 不要62(数位dp)

来源:互联网 发布:问卷星数据分析 编辑:程序博客网 时间:2024/06/06 01:22

这个题之前学数位dp的时候做过,但是水过两个水题之后就不再学数位dp了,知难而退了。不过题不刷始终还是不会,专练练数位dp。
以前看的是《初探数位dp》,现在看的http://blog.csdn.net/u013008291/article/details/46463449
先套一下大神的模板,体会下模板的作用。模板自己一步步看看就看懂了。
http://www.cnblogs.com/jffifa/archive/2012/08/17/2644847.html
这里有个模板变量的讲解。

#include <stdio.h>#include <string.h>int digit[10];int len;int f[10][2];void calc(int num){    len = 0;    while(num)    {        digit[len++] = num%10;        num /= 10;    }}int dfs(int i, int s, bool e){    if(i == -1) return 1;    if(!e && ~f[i][s]) return f[i][s];    int res = 0;    int u = e ? digit[i]:9;    for(int d = 0; d <= u; ++d)    {        if(d == 4 || (s && d == 2)) continue;        res += dfs(i-1, d == 6,e && d == u);    }    return e ? res : f[i][s] = res;}int solve(int num){    calc(num);    int res = dfs(len-1,0,true);    return res;}int main(){    int n,m;    memset(f,-1,sizeof(f));    while(scanf("%d %d",&n,&m) && n+m)        printf("%d\n",solve(m)-solve(n-1));    return 0;}
原创粉丝点击