首页 > Windows开发 > 详细

BZOJ1026: [SCOI2009]windy数 ( 数位dp )

时间:2017-11-04 19:06:44      阅读:243      评论:0      收藏:0      [点我收藏+]

嗯比前面两道都简单...其实这是我第一道写的数位dp...非常基础了...

依然是码代码....
我的代码...怎么这么丑呢....
技术分享
 1 #include<cmath>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<queue>
 7 using namespace std;
 8 long long a,b;
 9 int shu[20]={};
10 int f[20][20]={};
11 int abv(int x){
12     if(x>0){
13         return x;
14     }
15     return -x;
16 }
17 int dfs(int k,int num,bool shang){
18     if(k<=0){
19         return 1;
20     }
21     if((!shang)&&num>=0&&f[k][num]!=-1){
22         return f[k][num];
23     }
24     int ans=0,p,maxn=shang?shu[k]:9;
25     for(int i=0;i<=maxn;i++){
26         if(abv(i-num)<2){
27             continue;
28         }
29         p=i;
30         if(i==0&&num==-5){
31             p=num;
32         }
33         ans+=dfs(k-1,p,shang&&i==maxn);
34     }
35     if(!shang){
36         f[k][num]=ans;
37     }
38     return ans;
39 }
40 int solve(long long x){
41     memset(shu,0,sizeof(shu));
42     int k=0;
43     while(x){
44         shu[++k]=x%10;
45         x/=10;
46     }
47     return dfs(k,-5,1);
48 }
49 int main(){
50     scanf("%lld%lld",&a,&b);
51     memset(f,-1,sizeof(f));
52     printf("%d\n",solve(b)-solve(a-1));
53     return 0;
54 }
View Code

 

BZOJ1026: [SCOI2009]windy数 ( 数位dp )

原文:http://www.cnblogs.com/137shoebills/p/7783876.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!