题目链接:LibreOJ 不要62

解题思路:数位dp入门题目,数位dp是存在有模板的,可以通过一道题来领悟数位dp的思路。详细分析将放在代码中解释。

//#pragma GCC optimize(2)
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<map>
#include<stack>
#include<set>
#include<bitset>
#include<ctime>
#include<cstring>
#include<list>
#define ll long long
#define ull unsigned long long
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef  pair<int, int> PII;
const int N = 1e6 + 7;int n, m;
int a[12];   //存一个数字的每一位
int dp[15][15];   //表示 (我们填到从右往左数第i位,当第i位填j的时候,i左边的位数全填原数字本身)有多少种合适的车牌void init()
{for (int i = 0; i <= 9; i++) dp[1][i] = 1;  //个位初始条件,数位dp初始化dp[1][4] = 0;  //题目限制条件for(int i=2;i<=10;i++)  //枚举位数for(int j=0;j<=9;j++) //枚举这一位放什么数字for (int k = 0; k <= 9; k++)//枚举后一位的数字{//题目限制条件if (j == 4 || k == 4)continue;if (j == 6 && k == 2)continue;dp[i][j] += dp[i - 1][k];}
}int res(int x)// 0~x的方案数
{if (!x) return 1;  //边界条件mem(a, 0);int le = 0;  //x的长度int ans = 0;int last = 0;  //上一位的数字while (x)   //肢解x{a[++le] = x % 10;x /= 10;}/*这里是枚举每一位的数字来达到遍历0~x的效果*/for (int i = le; i >= 1; i--)  //从最高位开始枚举i{for (int j = 0; j < a[i]; j++)  //枚举第i位可以放的数字0~a[i]-1,为什么不能等于a[i]呢?因为放a[i]的情况将放在下一次循环中被计算{if (j == 4)continue;if (last == 6 && j == 2)continue;ans += dp[i][j];}if (a[i] == 4)break;if (a[i] == 2 && last == 6)break;last = a[i];if (i == 1)ans++;  //加上之前漏掉的x他自己}return ans;
}void solve()
{init();cin >> n >> m;while (n && m){cout << res(m) - res(n-1) << endl;cin >> n >> m;}
}int main()
{//std::ios::sync_with_stdio(false);//cin.tie(0), cout.tie(0);solve();return 0;
}

思路:
1.根据题意初始化方案数
2.根据题意写出求解函数
3.主函数解决问题

作者:Avalon·Demerzel

【动态规划】数位DP入门题:不要62相关推荐

  1. 数位dp入门题 洛谷P2657 [SCOI2009] windy 数

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

  2. hdu 2089 数位dp入门

    HDU 2089 题意:中文题 思路:数位dp入门题 AC代码: #include "iostream" #include "string.h" #includ ...

  3. Bomb(数位DP板题)

    题目链接:Bomb Problem Description The counter-terrorists found a time bomb in the dust. But this time th ...

  4. 不要62(HDU-2089)(数位DP模板题)

    杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍 ...

  5. 数位 DP 入门 (不要 62+windy 数)

    \[I\] 平常的做法是设 \(f_{i,j}\) 为 \(0\)~\(j \times 10^{i-1}\) 的合法个数,这里用某种神奇而快速的做法. 简化题意: 不要 \(6\ 2\) 连在一起的 ...

  6. 数位DP入门+数位DP模板

    数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数.所谓数位dp,字面意思就是在数位上进行dp咯.数位还算是比较好听的名字,数位的含义:一个数有个位.十位.百位.千 ...

  7. 动态规划 —— 数位 DP

    [概述] 数位 DP 实际是一种计数用的 DP,一般就是统计一个区间 [le,ri] 内满足一些条件数的个数. 所求的限定条件往往与数的位数有关,例如:数位之和.指定数码个数.数的大小顺序分组等. 题 ...

  8. 数位DP 学习笔记1(数位DP入门)

    HDU 2089 不要62: 题目大意是给你一个区间,让你统计这个区间里不包含 4 和 62 的数字的个数. 最朴素的思路是: 对于每个区间 [l, r],遍历所有在区间 [l, r] 里的数字,然后 ...

  9. hdu_Anniversary party_(树形DP入门题)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:有N个人,N-1个人有自己的上司,每个人有一个快乐值,如果这个人参加了聚会,那么这个人的直 ...

  10. 数位DP入门笔记(1)HUD-2089

    题目: 题目理解和思路: 1.此题是给一个6位车牌号,正着不能含有连着的62,不能有4. 2.判断车牌号可能会采用dfs,因为每增加一位数就包含带4,或者形成62两种不合法情况(可以用但此代码没有用到 ...

最新文章

  1. 4.9.3 方法注释
  2. Apache设置多网站
  3. VTK:几何对象之OpenVRCube
  4. 12306订票助手更新
  5. 服务器微信了早上好,每天早上好的问候语 微信早安问候语合集66句
  6. 判断Json字符串返回类型 对象 或者 数组
  7. 如何查看windows xp系统的位数?
  8. FZOJ2110: Star
  9. JSK-15 单独的数字【位运算】
  10. markDown零碎整理
  11. 190609每日一句,科比·布莱恩特:这就是我成功的原因,即使身陷低谷,也要抬头仰望星空
  12. DSD解码ES9038PRO和AK4497
  13. VIRTUALBOX无法加载USB移动设备的解决方法
  14. Can‘t reconnect until invalid transaction is rolled back
  15. 用计算机修改图片或照片,如何利用电脑自带的画图工具修改图片的基本属性
  16. 研发团队专业能力提升
  17. easyPOI导出时间字段注意事项
  18. python爬虫:爬取全国航班信息
  19. 经纬度与距离的换算关系
  20. 关于移相网络的深入分析

热门文章

  1. iOS图形处理概论:OpenGL ES,Metal,Core Graphics,Core Image,GPUImage,OpenCV等
  2. pycharm 快捷键设置为eclipse一样
  3. 李瑾博士:信誉的建立是否“不计成本”?
  4. HttpClient配置
  5. 某大型银行某系统性能调优过程跟踪记录
  6. 压缩数据库扩展名为.ldf的日志文件
  7. AJAX.NET用户开发指南
  8. Linux在日志中搜索关键词
  9. 【干货】js 数组操作合集(前端自我修养)
  10. 非关系型数据库Redis Linux 下安装