初学数位DP--hdu 2089
其实是做topcoder的时候碰到不会的题,看人家说要用数位dp,所以拿http://acm.hdu.edu.cn/showproblem.php?pid=2089来学习了一下
数位dp适合在一段数的区间内找出满足某些条件的数的个数,这个时候往往不能之间遍历,肯定会超时,则一般使用数位dp来解决
数位dp的常见形式是dp[i][j],表示开头是j的i位数满足条件的有多少个,当然也有其他dp[i][j][k]等等,但i,j,k都很小,不会像直接遍历那么耗时
像这道题的话,知道了dp[i][j]表示的是啥,就能列出状态转移方程(稍微认真看就能理解的):
for(int i=1;i<=7;i++){for(int j=0;j<10;j++)//枚举第i位可能出现的数{for(int k=0;k<10;k++)//枚举第i-1位可能出现的数{if(j!=4&&!(j==6&&k==2))dp[i][j] += dp[i-1][k];}}}
更加具体的介绍可以参考:http://wenku.baidu.com/link?url=o3ER_gVCyB0qcKthM-Y8vPtAGZ_u5bzOu_gUCUhPcXC6YfaSDgtBSXNEEvvGvSzyuDE9TULcPNsDrRd9IUtQVHeKUVrnPUjyfWjCly_J7Xq
以下附上ac这题的代码:
#include <iostream>
#include <string>
#include <string.h>
#include <algorithm>
using namespace std;
int dp[10][10];
void init()
{memset(dp,0,sizeof(dp));dp[0][0] = 1;for(int i=1;i<=7;i++){for(int j=0;j<10;j++)//枚举第i位可能出现的数{for(int k=0;k<10;k++)//枚举第i-1位可能出现的数{if(j!=4&&!(j==6&&k==2))dp[i][j] += dp[i-1][k];}}}
}
int solve(int n)
{init();int digit[10];int len = 0;while(n>0){digit[++len] = n%10;n/=10;}digit[len+1]=0;int ans = 0;for(int i=len;i;i--){for(int j=0;j<digit[i];j++){if(j!=4&&!(digit[i+1]==6&&j==2))ans+=dp[i][j];}if(digit[i]==4||(digit[i]==2&&digit[i+1]==6))break;}return ans;
}
int main()
{int l,r;while(cin>>l>>r){if(l+r==0)break;elsecout<<solve(r+1)-solve(l)<<endl;}return 0;}
转载于:https://www.cnblogs.com/pangblog/p/3400169.html
初学数位DP--hdu 2089相关推荐
- HDU - 2089 不要62 【暴力打表】【数位DP】
不要62 HDU - 2089 题意 求区间[n,m]之间有多少个数字不含4或者连续的62 解法1 由于数据范围是0~1e6,所以直接暴力判断每一位数字是否含有4或者62,然后求前缀和即可 #incl ...
- HDU 2089 不要62 数位DP
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2089 题目描述: 给定一个区间, 让你求这个区间中所有不带62 或 4 的数的个数 解题思路: 很明 ...
- hdu 2089 不要62【数位dp】
HDU 2089 求给定区间内不含62和4的数的个数. 数位dp入门.从这里我清楚了一些数位dp的用法.比如limit是判断是否达到上界,而且需要判断(!limit)..比如若题目要求不含11的个数, ...
- HDU 2089 不要62(数位DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意 求一个区间内,不出现4和连续的62的数的个数. 分析 可以暴力打表.也可以数位DP. 设: ...
- hdu 2089 数位dp入门
HDU 2089 题意:中文题 思路:数位dp入门题 AC代码: #include "iostream" #include "string.h" #includ ...
- 不要62 HDU - 2089【数位dp】
不要62 HDU - 2089 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以 ...
- Hdu 2089-不要62 数位dp
题目: http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Time Limit: 1000/1000 MS (Java/Others) Me ...
- HDU 6156 Palindrome Function 数位DP
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6156 题目描述: 求L~R所有的数的l~r进制的f(x), f(x) = 当前进制 如果回文串, f ...
- 【数位DP】B-number(HDU 3652)
B-number HDU 3652 题目大意: 有一个数n,求出1~n中含'13'且能被13整除的数有多少个 输入样例 13 100 200 1000 输出样例 1 1 2 2 解题思路: 用数位DP ...
最新文章
- linux 交叉编译 openssl
- python在匿名函数作和_跟光磊学Python开发-匿名函数函数和高阶函数
- css中position初解
- pandas计算移动平均值
- cocos2d之z轴位置示例
- 前端处理方式:特殊格式时间转换(2020-11-27T02:58:41.000000Z)
- PCB CS架构(工程系统)实现单点登入方法
- 关于JavaScript实现图片预加载的改进
- GTASA圣安地列斯 DirectX 2.0 ENB 下窗口化运行的解决办法
- 作为前端程序员:你必须知道的常用英语词汇!!全是干货!!!
- 美国纽约大学超级计算机中心,美国纽约最好的八所大学介绍
- 为什么说90%以上的创业者都在亏钱?
- 数据结构——2-3树
- GIS地图基础知识--入门教程
- 面具root后如何解决SafetyNet不通过-SafetyNet API错误解决办法
- android 新闻功能列表,news: 用Android基本技术实现的新闻App
- Python字符串算法
- 【融职教育】Web全栈工程师课程安排
- 安装Anaconda遇到问题--NSIS Error
- 活体检测——专利调研
热门文章
- 网络推广关键词布局仍需网络推广专员时刻“运筹帷幄”
- 浅析网站seo诊断都包括哪些内容?
- 软件验收标准和验收方法_自动门的验收标准
- android okhttp 多线程,android – Okhttp Authenticator多线程
- h3c wa4320配置上网_企业路由不为人知的功能:自动吸粉、上网监控、多宽带合并...
- 理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)
- 详解Google第二代TPU 既能推理又能训练 性能霸道
- LSM树——放弃读能力换取写能力,将多次修改放在内存中形成有序树再统一写入磁盘,查找复杂度O(k*log(n)),结合bloom filter提高查找性能...
- angular1x初始与架构演进(一)
- HSmartWindowControl 之 摄像头实时显示( 使用 WPF )