hdu 2089 不要62【数位dp】
求给定区间内不含62和4的数的个数。
数位dp入门。从这里我清楚了一些数位dp的用法。比如limit是判断是否达到上界,而且需要判断(!limit).。比如若题目要求不含11的个数,举例来说:区间在[1,215],当百位开始枚举为0时,十位枚举1,个位可以取0,2~9,即dp[0][1]=9,表示枚举到个位前一位为1时满足的个数,当然此时除了1都满足。而回溯枚举到百位为2,十位为1时,由于dp[0][1]已经枚举了,可以直接返回,但此时返回时有错误的,dp[0][1]=9,而百位为2,十位为1,个位是有限制的。所以记忆化判断是必须要有(!limit),否则会造成重复且答案错误。
所以可以设计dp[pos][sta]表示枚举到第pos为状态为sta时的合法个数。sta指前一位是否为6,所以sta=0或sta=1。
#include<iostream>
#include<cstring>
using namespace std;
int dp[][];
int digit[]; int dfs(int pos,int pre,int sta,bool limit)
{
if(pos==-) return ;
if(!limit&&dp[pos][sta]!=-) return dp[pos][sta];
int up=limit?digit[pos]:;
int tmp=;
for(int i=;i<=up;i++){
if(pre==&&i==) continue;
if(i==) continue;
tmp+=dfs(pos-,i,i==,limit&&i==digit[pos]);
}
if(!limit) dp[pos][sta]=tmp;
return tmp;
} int solve(int x)
{
int pos=;
while(x){
digit[pos++]=x%;
x/=;
}
return dfs(pos-,-,,true);
} int main()
{
int n,m;
while(cin>>n>>m,!(n==&&m==))
{
memset(dp,-,sizeof(dp));
cout<<solve(m)-solve(n-)<<endl;
}
return ;
}
既然sta已包含前一位的信息,所以我觉得dfs时不记录pre也行。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=;
int dp[N][];
int digit[N]; int dfs(int pos,int sta,bool limit)
{
if(pos==) return ;
if(!limit&&dp[pos][sta]!=-) return dp[pos][sta];
int up=limit?digit[pos]:;
int ans=;
for(int i=;i<=up;i++){
if(sta&&i==) continue;
if(i==) continue;
ans+=dfs(pos-,i==,limit&&i==digit[pos]);
}
if(!limit) dp[pos][sta]=ans;
return ans;
} int solve(int x)
{
int pos=;
while(x)
{
digit[++pos]=x%;
x/=;
}
return dfs(pos,,true);
} int main()
{
int n,m;
while(cin>>n>>m,!(n==&&m==))
{
memset(dp,-,sizeof(dp));
cout<<solve(m)-solve(n-)<<endl;
}
return ;
}
hdu 2089 不要62【数位dp】的更多相关文章
- Hdu 2089 不要62 (数位dp入门题目)
题目链接: Hdu 2089 不要62 题目描述: 给一个区间 [L, R] ,问区间内不含有4和62的数字有多少个? 解题思路: 以前也做过这个题目,但是空间复杂度是n.如果数据范围太大就GG了.今 ...
- HDU 2089 - 不要62 - [数位DP][入门题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...
- [hdu 2089] 不要62 数位dp|dfs 入门
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求[n, m]区间内不含4和62的数字个数. 这题有两种思路,直接数位dp和dfs 数位d ...
- HDU 2089 不要62 数位DP模板题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 参考博客:https://www.cnblogs.com/HDUjackyan/p/914215 ...
- HDU 2089 不要62(数位DP·记忆化搜索)
题意 中文 最基础的数位DP 这题好像也能够直接暴力来做 令dp[i][j]表示以 j 开头的 i 位数有多少个满足条件 那么非常easy有状态转移方程 dp[i][j] = sum{ dp[ ...
- hdu 2089 不要62 数位dp
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 2089 不要62 (数位dp基础题)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 2089不要62 (数位dp)
Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来 ...
- hud 2089 不要62 (数位dp)
#include<stdio.h> #include<string.h> #include<math.h> #define max 10 ]; int number ...
- HDOJ题目2089 不要62(数位DP)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
随机推荐
- Spring_boot_pom.xml和启动方式
spring-boot-starter-parent 整合第三方常用框架信息(各种依赖信息) spring-boot-starter-web 是Springboot整合SpringMvc Web ...
- angular4 Form表单相关
ng4中,有两种方式去声明一个表单 一:Template-Driven Forms - 模板驱动式表单 [引入FormsModule] 1.ngForm赋值 [可以方便的获取表单的值] <f ...
- python无法启动火狐浏览器且报错“selenium.common.exceptions.WebDriverException: Message: Unable to find a matching set of capabilities”
安装了python2,使用pip安装了selenium,但是在使用时,报了“selenium.common.exceptions.WebDriverException: Message: 'gecko ...
- 2019.9.19 csp-s模拟测试47 反思总结
思路接近正解?都想到了?这都是借口呀. 没有用的,往前走吧. T1:Emotional Flutter 我的做法和题解不太一样,我把s放在最后考虑了. 因为出发以后步幅是一样的,所以每一个黑条可以ba ...
- linux目录结构详细说明
Linux各目录及每个目录的详细介绍 [常见目录说明] 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里. /etc 存放系统管理和配置文件 /home 存放所 ...
- Struts_登录练习(未配置拦截器)
1.在domain中建个User.java和其配置文件 并在hibernate.cfg.xml中加入配置 2.配置struts文件 3.在jsp文件中修改action地址和name属性,并标注错误信息 ...
- NPOI 1.0
1 应用组件 using NPOI.SS.UserModel; using NPOI.HSSF.Util; 2.一个简单demo 2.1 定义单元格常用到样式的枚举 public enum st ...
- Django 用 userena 做用户注册验证登陆
django-admin startproject userena2 cd userena2python manage.py startapp accounts vim userena2/settin ...
- C# 详解反射
原博客:http://www.cnblogs.com/Stephenchao/p/4481995.html 两个现实中的例子: 1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的 ...
- awk notes
字符串拼接 cat sql | awk '{print " ALTER TABLE tableA ALTER " $1 " TYPE " $2 " ...