BZOJ 1026: [SCOI2009]windy数 数位DP
2017-02-28 20:34
441 查看
简单的数位DP,相邻两位比较就好了。
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #define ll long long using namespace std; ll a,b; ll f[30][30],d[30],bin[30]; ll solve(ll x) { if(x==0) return 0; memset(d,0,sizeof(d)); ll cnt1=0,res=0; while(x){d[++cnt1]=x%10;x/=10;} for(int i=1;i<d[cnt1];i++) res+=f[cnt1][i]; for(int i=cnt1-1;i>=1;i--) { for(int j=1;j<=9;j++) { res+=f[i][j]; } } for(int i=cnt1-1;i>=1;i--) { for(int j=0;j<d[i];j++) if(abs(d[i+1]-j)>=2) res+=f[i][j]; if(abs(d[i+1]-d[i])<2) break; } return res; } int main() { scanf("%lld%lld",&a,&b); bin[1]=1; for(int i=2;i<=10;i++) bin[i]=bin[i-1]*10; for(int i=0;i<=9;i++) f[1][i]=1; for(int i=2;i<=10;i++) { for(int j=0;j<=9;j++) { for(int k=0;k<=9;k++) { if(abs(j-k)>=2) f[i][j]+=f[i-1][k]; } } } printf("%lld",solve(b+1)-solve(a)); return 0; }
相关文章推荐
- bzoj 1026: [SCOI2009]windy数 数位dp
- [SCOI2009] [BZOJ1026] Windy数 - 数位DP
- bzoj1026 [SCOI2009]windy数 数位DP
- 【bzoj1026】[SCOI2009]windy数 数位DP
- [BZOJ1026][SCOI2009]windy数(数位DP)
- 【BZOJ】1026: [SCOI2009]windy数(数位dp)
- [bzoj1026][SCOI2009]windy数——数位dp
- BZOJ 1026 [SCOI2009]windy数 (数位DP)
- bzoj1026: [SCOI2009]windy数-数位DP
- 【数位DP】bzoj1026: [SCOI2009]windy数
- 【BZOJ1026】【SCOI2009】windy数 数位DP
- [bzoj1026][SCOI2009][windy数] (数位dp)
- bzoj 1026 [SCOI2009]windy数(数位DP)
- BZOJ1026: [SCOI2009]windy数(数位dp)
- BZOJ 1026: [SCOI2009]windy数 数位DP
- bzoj 1026: [SCOI2009]windy数 (数位dp)
- 【BZOJ 1026】【SCOI2009】[数位dp]windy数
- 【bzoj 1026】[SCOI2009]windy数(数位dp)
- 【BZOJ1026】[SCOI2009]windy数【数位DP】
- [BZOJ1026][SCOI2009]windy数(数位dp)