数位dp(不要62)
http://acm.hdu.edu.cn/showproblem.php?pid=2089
题意:求区间内满足以下条件的数量
1、数位不能出现4,2、任意两相邻数位不能是62。
解法:数位dp【pos】【sta】表示第pos位为6和不是6两种状态的满足条件的数量。
//#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdio.h>
#include <queue>
#include <stack>;
#include <map>
#include <set>
#include <ctype.h>
#include <string.h>
#include <vector>
#define ME(x , y) memset(x , y , sizeof(x))
#define SF(n) scanf("%d" , &n)
#define rep(i , n) for(int i = 0 ; i < n ; i ++)
#define INF 0x3f3f3f3f
#define mod 10
#define PI acos(-1)
using namespace std;
typedef long long ll ;
int a[10];
int dp[10][2]; int dfs(int pos , int pre , int sta , int limit)
{
if(pos == -1) return 1;
if(!limit && dp[pos][sta] != -1) return dp[pos][sta];
int up = limit ? a[pos] : 9 ;
int ans = 0 ;
for(int i = 0 ; i <= up ; i++)
{
if(i == 4) continue ;
if(pre == 6 && i == 2) continue ;
ans += dfs(pos-1 , i , i == 6 , limit && a[pos] == i);
}
if(!limit) dp[pos][sta] = ans ;
return ans ;
} int solve(int x)
{
int pos = 0 ;
while(x)
{
a[pos++] = x % 10 ;
x /= 10 ;
}
return dfs(pos-1 , 0 , 0 , 1);
} int main()
{ int n , m ;
memset(dp , -1 , sizeof(dp));
while(~scanf("%d%d" , &n , &m)&&n+m)
{
printf("%d\n" , solve(m) - solve(n-1));
} return 0;
}
2、暴力
//#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdio.h>
#include <queue>
#include <stack>;
#include <map>
#include <set>
#include <string.h>
#include <vector>
#define ME(x , y) memset(x , y , sizeof(x))
#define SF(n) scanf("%d" , &n)
#define rep(i , n) for(int i = 0 ; i < n ; i ++)
#define INF 0x3f3f3f3f
#define mod 998244353
#define PI acos(-1)
using namespace std;
typedef long long ll ;
int a[10];
int vis[1000009]; void init()
{
for(int i = 1 ; i <= 1000000 ; i++)
{
int l = 0 , t = i ;
while(t)
{
a[l++] = t % 10;
t /= 10 ;
}
for(int j = l - 1 ; j > 0 ; j--)
{
if(a[j] == 6 && a[j-1] == 2)
{
vis[i] = 1 ;
}
else if(a[j] == 4 || a[j-1] == 4)
{
vis[i] = 1 ;
}
}
}
vis[4] = 1 ;
} int main()
{
int n , m ;
init();
while(~scanf("%d%d" , &n, &m) && n + m)
{
int sum = 0 ;
for(int i = n ; i <= m ; i++)
{
if(vis[i])
{
sum++ ;
}
}
cout << (m - n + 1) - sum << endl ;
} return 0 ;
}
数位dp(不要62)的更多相关文章
- 数位DP 不要62
数位DP的问法是从某个数到某个数的区间里,求出满足题目要求的个数: 如本题所说的不要62和4,就是求出这个区间内,满足这一条件的数: 比如问 6 199的这个区间内满足条件的数,那么就求出1到199满 ...
- HDU 2089 数位dp入门
开始学习数位dp...一道昨天看过代码思想的题今天打了近两个小时..最后还是看了别人的代码找bug...(丢丢) 传说院赛要取消 ? ... 这么菜不出去丢人也好吧~ #include<stdi ...
- HDU2089 不要62[数位DP]
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 2089 不要62(数位dp入门)
题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 题解:这是数位DP的入门题了,首先要理解数DP的原理,DP[i][j]:代表第i位的第j值,举个栗子:如4715 数位数是从右向 ...
- 【数位DP】Hdu 2089:不要62
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 数位dp入门 hdu2089 不要62
数位dp入门 hdu2089 不要62 题意: 给定一个区间[n,m] (0< n ≤ m<1000000),找出不含4和'62'的数的个数 (ps:开始以为直接暴力可以..貌似可以,但是 ...
- hdu2089:不要62(基础数位dp)
题意:规定一个合法的号码不能含有4或者是连续的62 给定区间[n,m] 问此区间内合法的号码的个数 分析:数位dp dp[i][j]代表 最高位为 j 的 i 位数有多少个合法的 然后按题目规则进行转 ...
- 【数位DP】【HDU2089】不要62
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- hdu 2089 不要62(入门数位dp)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 【Hdu2089】不要62(数位DP)
Description 题目大意:给定区间[n,m],求在n到m中没有"62"或"4"的数的个数. 如62315包含62,88914包含4,这两个数都是不合法的 ...
随机推荐
- 通用DES加密解密方法
/// <summary> /// DES加密方法 /// </summary> /// <param name="strPlain">明文&l ...
- System limit for number of file watchers reached
https://blog.csdn.net/weixin_43760383/article/details/84326032 sudo xed /etc/sysctl.conf 在最下添加 fs.in ...
- B. Chocolates
B. Chocolates time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- Android_(服务)Vibrator振动器
Vibrator振动器是Android给我们提供的用于机身震动的一个服务,例如当收到推送消息的时候我们可以设置震动提醒,也可以运用到游戏当中增强玩家互动性 运行截图: 程序结构 <?xml ve ...
- 分布式-信息方式-JMS信息结构
JMS的消息结构JMS消息由以下几部分组成:消息头,属性和消息体消息头包含消息的识别信息和路由信息,消息头包含一些标准的属性如下:1: JMSDestination:由send方法设置2: JMSDe ...
- auth 认证组件的补充
Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...
- 实现shape图层添加label
void CmapwingisTest2View::OnToolsAdd32780() { TCHAR szFilters[]= _T("SHP Files (*.shp)|*.shp||& ...
- Springboot 使用 webSocket
介绍 WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进 ...
- hibernarte主键生成机制
1. 主键(id)生成策略 1) assigned 主键由外部程序负责生成,在 save() 之前指定. 2) hilo 通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源 ...
- 190707Python-RabbitMQ
一.简单的RabbitMQ示例 生产者 # Author:Li Dongfei import pika connection = pika.BlockingConnection( pika.Conne ...