JZOJ 1039. SCOI2009windy数
Posted zjzjzj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JZOJ 1039. SCOI2009windy数相关的知识,希望对你有一定的参考价值。
题目
分析
- 数位DP板子题
代码
1 #include<iostream> 2 #include<cstring> 3 #include<cmath> 4 using namespace std; 5 int e[10001],cnt; 6 long long f[12][12][2][2]; 7 long long dp(int pos,int pre,bool zero,bool lim) 8 9 if (pos<1) return 1; 10 if (f[pos][pre][zero][lim]!=-1) return f[pos][pre][zero][lim]; 11 int end=lim?e[pos]:9; 12 int ans=0; 13 for (int i=0;i<=end;i++) 14 15 if (abs(i-pre)>=2||zero) 16 17 ans+=dp(pos-1,i,zero&&(i==0),lim&&(i==end)); 18 19 20 return f[pos][pre][zero][lim]=ans; 21 22 long long calc(int x) 23 24 memset(f,-1,sizeof(f)); 25 memset(e,0,sizeof(e)); 26 cnt=0; 27 while (x) e[++cnt]=x%10,x/=10; 28 return dp(cnt,0,1,1); 29 30 int main () 31 32 int a,b; 33 cin>>a>>b; 34 cout<<calc(b)-calc(a-1); 35
以上是关于JZOJ 1039. SCOI2009windy数的主要内容,如果未能解决你的问题,请参考以下文章