zoukankan      html  css  js  c++  java
  • 洛谷 P3413 【萌数】

    敲完这篇题解,我就,我就,我就,嗯,好,就这样吧。。。

    思路分析:

    首先我们要知道一个回文串的性质——假如说一个[l-1,r+1]的串是回文的,那么[l,r]一定也是回文的。

    所以我们只要记录前一个数和前前一个数就可以了,假如说当前数和他们(前一个数和前前一个数)当中的任意一个相等,那么它就一定是一个萌数。

    知道了这些我们就可以开始设计状态了。

    dp[pos][pre1][pre2]表示当前找到pos位,前一个数为pre1,前前一个数为pre2时的萌数个数。

    代码实现:

    var
        a:array[1..2000] of Integer;
        dp:array[1..2000,0..9,0..9,0..1] of Int64;
        len,i:Longint;
        ans,oo,t:int64;
        l,r,st:ansistring;
    function dfs(pos,pre1,pre2,lead,flag,val:Longint):int64;
    var
        i,limit,x:Integer;
        res:int64;
    begin
        if pos>len then exit(val);
        if (pre2>=0)and(lead+flag=0)and(dp[pos][pre1][pre2][val]<>-1) then dfs:=(dp[pos][pre1][pre2][val]) else
        begin
        if flag=1 then limit:=a[pos] else limit:=9;
        res:=0;
        for i:=0 to limit do
        begin
            if lead=1 then x:=-1 else x:=pre1;
            res:=(res+dfs(pos+1,i,x,ord((lead=1)and(i=0)),ord((flag=1)and(i=limit)),ord((val=1)or((i=pre1)and(lead=0))or((i=pre2)and(lead=0)))))mod oo;
        end;
        if (pre2>=0)and(lead+flag=0) then dp[pos][pre1][pre2][val]:=res;
        dfs:=res;
        end;
    end;
    begin
        oo:=1000000007;
        readln(st);
        t:=pos(' ',st);
        l:=copy(st,1,t-1);
        len:=length(l);
        delete(st,1,t);
        for i:=1 to len do
            a[i]:=ord(l[i])-48;
        while i>0 do
            if a[i]>0 then begin dec(a[i]); break; end
            else begin a[i]:=9; dec(i); end;
        fillchar(dp,sizeof(dp),255);
        ans:=dfs(1,-1,-1,1,1,0);
        r:=st;
        len:=length(r);
        for i:=1 to len do
            a[i]:=ord(r[i])-48;
        ans:=((dfs(1,-1,-1,1,1,0)-ans)mod oo+oo)mod oo;
        writeln(ans);
    end.
  • 相关阅读:
    700. Search in a Binary Search Tree
    100. Same Tree
    543. Diameter of Binary Tree
    257. Binary Tree Paths
    572. Subtree of Another Tree
    226. Invert Binary Tree
    104. Maximum Depth of Binary Tree
    1、解决sublime打开文档,出现中文乱码问题
    移植seetafaceengine-master、opencv到ARM板
    ubuntu16.04-交叉编译-SeetaFaceEngine-master
  • 原文地址:https://www.cnblogs.com/WR-Eternity/p/9931472.html
Copyright © 2011-2022 走看看