基础题复习

这次用了dfs写法,感觉比较好

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. typedef long long ll;
  7. const int N=10;
  8. inline int read(){
  9. char c=getchar();int x=0,f=1;
  10. while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
  11. while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
  12. return x*f;
  13. }
  14. int r, l, a[N], len;
  15. int f[N][2];
  16. int dfs(int d, bool flag, bool sky) { //printf("dfs %d %d %d\n",d,flag,sky);
  17. if(d==0) return 1;
  18. if(!sky && f[d][flag]!=-1) return f[d][flag];
  19. int now=0, lim = sky ? a[d] : 9;
  20. for(int i=0; i<=lim; i++) {
  21. if(i==4 || (flag && i==2)) continue;
  22. now += dfs(d-1, i==6, i==lim && sky);
  23. }
  24. return sky ? now : f[d][flag]=now;
  25. }
  26. int cal(int n) {
  27. len=0;
  28. while(n) a[++len]=n%10, n/=10;
  29. return dfs(len, 0, 1);
  30. }
  31. int main() {
  32. freopen("in","r",stdin);
  33. memset(f, -1, sizeof(f));
  34. while(true) {
  35. l=read(); r=read();
  36. if(l==0 && r==0) break;
  37. printf("%d\n", cal(r)-cal(l-1));
  38. }
  39. }
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. typedef long long ll;
  7. const int N=15;
  8. inline int read(){
  9. char c=getchar();int x=0,f=1;
  10. while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
  11. while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
  12. return x*f;
  13. }
  14. int l, r, a[N], len;
  15. int f[N][N];
  16. int dfs(int d, int last, bool zero, bool sky) { //printf("Dfs %d %d %d\n",d,last,sky);
  17. if(d==0) return 1;
  18. if(!sky && !zero && f[d][last]!=-1) return f[d][last];
  19. int now=0, lim = sky ? a[d] : 9; //printf("lim %d\n",lim);
  20. for(int i=0; i<=lim; i++)
  21. if(zero || abs(i-last)>=2) now += dfs(d-1, i, zero && i==0, sky && i==lim);
  22. return (sky||zero) ? now : f[d][last]=now;
  23. }
  24. int cal(int n) {
  25. len=0;
  26. while(n) a[++len]=n%10, n/=10;
  27. return dfs(len, 0, 1, 1);
  28. }
  29. int main() {
  30. freopen("in","r",stdin);
  31. memset(f,-1,sizeof(f));
  32. //for(int i=0; i<=50; i+=10) printf("hi %d %d \n",i,cal(i));
  33. //printf("hi %d %d\n",24,cal(24));
  34. l=read(); r=read();
  35. printf("%d\n", cal(r)-cal(l-1));
  36. }

HDU2089 不要62 BZOJ1026: [SCOI2009]windy数 [数位DP]的更多相关文章

  1. BZOJ1026: [SCOI2009]windy数[数位DP]

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 6346  Solved: 2831[Submit][Sta ...

  2. [bzoj1026][SCOI2009]windy数——数位dp

    题目 求[a,b]中的windy数个数. windy数指的是任意相邻两个数位上的数至少相差2的数,比如135是,134不是. 题解 感觉这个题比刚才做的那个简单多了...这个才真的应该是数位dp入门题 ...

  3. 【BZOJ-1026】windy数 数位DP

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5230  Solved: 2353[Submit][Sta ...

  4. bzoj 1026 [SCOI2009]windy数 数位dp

    1026: [SCOI2009]windy数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...

  5. luogu P2657 [SCOI2009]windy数 数位dp 记忆化搜索

    题目链接 luogu P2657 [SCOI2009]windy数 题解 我有了一种所有数位dp都能用记忆话搜索水的错觉 代码 #include<cstdio> #include<a ...

  6. 【bzoj1026】[SCOI2009]windy数 数位dp

    题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 输入 包含两个整数 ...

  7. 题解 BZOJ1026 & luogu P2657 [SCOI2009]windy数 数位DP

    BZOJ & luogu 看到某大佬AC,本蒟蒻也决定学习一下玄学的数位$dp$ (以上是今年3月写的话(叫我鸽神$qwq$)) 思路:数位$DP$ 提交:2次 题解:(见代码) #inclu ...

  8. 洛谷P2657 [SCOI2009]windy数 [数位DP,记忆化搜索]

    题目传送门 windy数 题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B,总共有多少个win ...

  9. P2657 [SCOI2009]windy数 数位dp

    数位dp之前完全没接触过,所以NOIP之前搞一下.数位dp就是一种dp,emm……用来求解区间[L,R]内满足某个性质的数的个数,且这个性质与数的大小无关. 在这道题中,dp[i][j]代表考虑了i位 ...

随机推荐

  1. ACM_扩展欧几里德算法

    <pre name="code" class="cpp">/* 扩展欧几里德算法 基本算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表 ...

  2. python写一个邮箱伪造脚本

    前言: 原本打算学php MVC的思路然后写一个项目.但是贼恶心, 写不出来.然后就还是用python写了个邮箱伪造. 0x01 第一步先去搜狐注册一个邮箱 然后,点开设置,开启SMTP服务. 当然你 ...

  3. MySQL基础----动态SQL语句

    尊重原创:http://blog.csdn.net/abc19900828/article/details/39501643   动态sql语句基本语法 1 :普通SQL语句可以用Exec执行 eg: ...

  4. Linux文件链接hard link与symbolic link

    Linux中文件链接有两种方式,一种是hard link,又称为硬链接:另一种是symbolic link,又称为符号链接.要区分两者的不同要回顾Linux常用的ext2文件系统.这种文件系统使用in ...

  5. [国嵌攻略][077][Linux时间编程]

    时间类型 Coordinated Universal Time(UTC):世界标准时间,也就是格林威治时间(Greenwich Mean Time, GMT). Calendar Time:日历时间, ...

  6. 小工具:截图&简单图像处理

    一.程序运行截图 二.获取屏幕截图的方法 首先知道我们可以通过Screen.PrimaryScreen.Bounds获取到当前整个屏幕,再利用Bitmap和Graphics就可以得到整个屏幕的图片了. ...

  7. Spider_Man_5.1 の Mongodb_安装

    先安装: 环境Mac OS X 我是直接用brew来安装的,感觉这个包管理工具,很省心. 安装Homebrew:ruby -e "$(curl -fsSL https://raw.githu ...

  8. HDU 1213 How Many Tables(模板——并查集)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1213 Problem Description Today is Ignatius' birthday ...

  9. js object 常用方法总结

    Object.assign(target,source1,source2,...) 该方法主要用于对象的合并,将源对象source的所有可枚举属性合并到目标对象target上,此方法只拷贝源对象的自身 ...

  10. v-for并判断当前元素是否选中:$set实现响应添加属性

    前言 一直纠结着使用v-for进行列表渲染时如何为当前的元素添加是否选中的标识. 1.v-for进行列表渲染 <div class="lists"> <ul> ...