【数位dp】hdu2089 不要62

http://www.cnblogs.com/xiaohongmao/p/3473599.html

#include<cstdio>
using namespace std;
int n,m,f[8][3];
void init()
{
    f[0][0]=1;
    for(int i=1;i<=7;++i)
      {
          f[i][0]=f[i-1][0]*9-f[i-1][1];
          f[i][1]=f[i-1][0];
          f[i][2]=f[i-1][2]*10+f[i-1][0]+f[i-1][1];
      }
}
int work(int x)
{
    int ans=0,t=x,bit[10],len=0;
    while(t)
      {
          bit[++len]=t%10;
          t/=10;
      }
    bit[len+1]=bit[len+2]=0;
    bool flag=0;
    for(int i=len;i;--i)
      {
          if((bit[i+1]==2 && bit[i+2]==6) || bit[i+1]==4)
            flag=1;
          ans+=f[i-1][2]*bit[i];
          if(flag)
            ans+=bit[i]*f[i-1][0];
          else 
          {
              if(bit[i] > 6)
                  ans+=f[i-1][1];
              if(bit[i] > 4)
                  ans+=f[i-1][0];
              if(bit[i+1] == 6 && bit[i] > 2)
                  ans+=f[i][1];
          }
      }
    return x-ans;
}
int main()
{
    init();
//    freopen("hdu2089.in","r",stdin);
    while(1)
      {
          scanf("%d%d",&n,&m);
          if((!n) && (!m))
            break;
          printf("%d\n",work(m+1)-work(n));
      }
    return 0;
}
posted @ 2015-06-24 08:53  AutSky_JadeK  阅读(369)  评论(0编辑  收藏  举报
TVアニメ「Charlotte(シャーロット)」公式サイト TVアニメ「Charlotte(シャーロット)」公式サイト