HDU 2089 不要62 (数位DP,入门)
题意:
只要含连续的62,或者含4的车牌号码都是不吉利的,其他都是吉利的组合。问区间[L,R]中有多少个数是吉利的?
思路:
依然是利用树(10进制是十叉树)的思想,统计左边所有子树有多少个数是吉利的。这道题得先打表,就是暴力打表都不会超时,否则可能超时了。暴力打表可以直接将0~106扫一遍直接找到[0->R]中吉利的有几个,利用前缀和就行了。
太暴力就没意思了。先用DP处理出吉利的数量以及最高位以2开头的吉利数量,用dp[i][1]表示i位数的吉利数量,dp[i][2]表示i位数且最高位为2的吉利数量。接下来对每个询问的L和R进行统计,差作为答案。看代码就行了,主要是需要考虑得全面一些,明确这一步统计的到底是表示什么。
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <algorithm>
#include <vector>
#include <iostream>
#define pii pair<int,int>
#define INF 0x7f3f3f3f
#define LL long long
using namespace std;
const double PI = acos(-1.0);
const int N=; int dp[N][N], bit[N], s, t;
void pre_cal()
{
dp[][]=;
for(int i=; i<=; i++ )
{
dp[i][]=*dp[i-][]-dp[i-][]; //吉利(包括0开头)
dp[i][]=dp[i-][]; //最高位含2:已经扣除不吉利的了
}
} int cal(int n) //计算区间[0~n]吉利的数量
{
memset(bit,,sizeof(bit));
int len=;
while(n)
{
bit[++len]=n%;
n/=;
}
int ans=, i;
for(i=len ;i>; i--)
{
ans+=dp[i-][]*bit[i];
if(bit[i]>) ans-=dp[i-][];
if(bit[i+]==&&bit[i]>) ans-=dp[i-][];
if(bit[i]>) ans-=dp[i-][]; //注意点!
if(bit[i+]==&&bit[i]==||bit[i]==) break;
}
if(i==) ans++; //n本身是否吉利?
return ans;
} int main()
{
//freopen("input.txt","r",stdin);
pre_cal();
while(scanf("%d%d",&s,&t), s+t)
printf("%d\n",cal(t)-cal(s-));
return ;
}
AC代码
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). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来 ...
- hdu 2089 不要62--数位dp入门
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Des ...
- hdu 4722 Good Numbers( 数位dp入门)
Good Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
随机推荐
- NFS原理详解
NFS原理详解 摘自:http://atong.blog.51cto.com/2393905/1343950 2013-12-23 12:17:31 标签:linux NFS nfs原理详解 nfs搭 ...
- 34.Docker安装Mysql参数及环境变量使用
容器安装好后,通过exec进去到容器的内部, 容器安装的时候两种容器配置参数 直接在镜像的后面加配置 第二种方式 把这段代码拷贝过来.参数我们可以写在镜像的后面 我们把参数写在镜像的后面 然后我们需要 ...
- C# 移除string[] 数组中的指定元素
本文转载自 http://www.cnblogs.com/jcdd-4041/p/3279531.html 第一步:先把string[] 转换成 ArrayList 第二步:移除指定元素 第三步 ...
- Flask RESTful API搭建笔记
之前半年时间,来到项目的时候,已经有一些东西,大致就是IIS+MYSQL+PHP. 所以接着做,修修补补,Android/iOS与服务器数据库交换用PHP, Web那边则是JS+PHP,也没有前后端之 ...
- Java 普通方法和构造方法的区别
构造方法: ①方法名和 类名相同 ②在方法名的前面没有返回值类型的声明 ③在方法中不能使用return语句返回一个值 ④在创建对象时,要调用new,如:book b1=new book(); ⑤当没有 ...
- 无监督学习:Linear Dimension Reduction(线性降维)
一 Unsupervised Learning 把Unsupervised Learning分为两大类: 化繁为简:有很多种input,进行抽象化处理,只有input没有output 无中生有:随机给 ...
- 【TIDB】4、业界使用情况
一.小米 1.背景 小米关系型存储数据库首选 MySQL,单机 2.6T 磁盘.由于小米手机销量的快速上升和 MIUI 负一屏用户量的快速增加,导致负一屏快递业务数据的数据量增长非常快, 每天的读写量 ...
- jQuery EasyUI/TopJUI创建日期时间输入框
jQuery EasyUI/TopJUI创建日期时间输入框 日期时间输入框组件 HTML 和日期输入框类似,日期时间输入框允许用户选择日期和指定的时间并按照指定的输出格式显示.相比日期输入框,它在下拉 ...
- Linux上传下载工具FileZilla(GNU软件) 文件传输和配置文件修改
- p标签间距问题
用<p></p>标签写文本时,控制行与行之间的高度最好用line-height,不要用margin或padding: 因为P标签本身就带有一定的上下间距,且自带的间距在模拟 ...