开学之后完全没时间写博客....

HDU 2089 不要62(vjudge) 数位DP

思路:

题目给出区间[n,m] ,找出不含4或62的数的个数

用一个简单的差分:先求0~m+1的个数,再减去0~n的个数.

但问题依旧不简单,再次简化为求0~i位数中不含4或62的数的个数.

i= //0~9中
i= //0~99中
i= //0~999中
......
dp[i][] //0~i位数中的吉利数
dp[i][] //0~i位数中以2打头的吉利数
dp[i][] //0~i位数中的非吉利数(含4或62)

所以第i位数中的吉利数个数为:

dp[i][]=dp[i-1][]*-dp[i-][i]

第i位数中以2打头的幸运数个数为:

dp[i][]=dp[i-][]

第i位数中的非吉利数个数为:

dp[i][]=dp[i-][]*+dp[i-][]+dp[i-][]

同时初始值为:

dp[][]=;
dp[][]=;
dp[][]=;

AC码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int dp[][]; void INIT()
{
memset(dp,,sizeof(dp));
dp[][]=;
for(int i=;i<=;i++)
{
dp[i][]=dp[i-][]*-dp[i-][];//在吉利数首位补除了4的9个数,减去在2前补6的个数
dp[i][]=dp[i-][];//吉利数在首位补2
dp[i][]=dp[i-][]*+dp[i-][]+dp[i-][];//不吉利的情况
}
} int work(int x)
{
int d[],cnt=,temp=x;
while(temp)
{
d[++cnt]=temp%;
temp/=;
}
d[cnt+]=;
int flag=,ans=;
for(int i=cnt;i>;i--)
{
ans+=d[i]*dp[i-][];//用前一位所以不吉利数推出
if(flag) ans+=d[i]*dp[i-][];// 之前有不吉利数
else
{
if(d[i]>) ans+=dp[i-][];//4
if(d[i]>) ans+=dp[i-][];//6
if(d[i+]==&&d[i]>) ans+=dp[i][];//62
}
if(d[i]==||(d[i+]==&&d[i]==)) flag=;
}
return x-ans;//减去不吉利数的个数
} int main()
{
int m,n;
INIT();
while(~scanf("%d%d",&n,&m))
{
if(n==&&m==) break;
printf("%d\n",work(m+)-work(n));
}
return ;
}

2019-09-16 18:50:26

2019年9月训练(壹)数位DP (HDU 2089)的更多相关文章

  1. 2019年9月训练(贰)区间DP (luogu 4290)

    区间DP luogu 4290 明显的区间DP. 定义 dp[l][r][k]/*表示区间[l,r]能否凑成k(W,I,N,G)字符*/mp['W']=1;mp['I']=2;mp['N']=3;mp ...

  2. 数位DP HDU - 2089 不要62

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. 专题训练之数位DP

    推荐以下一篇博客:https://blog.csdn.net/wust_zzwh/article/details/52100392 1.(HDOJ2089)http://acm.hdu.edu.cn/ ...

  4. 2019年5月训练记录(更新ing)

    前言 \(ZJOI\)正式结束了. 但期中考试只考了年级\(216\),退役既视感... 于是就被抓回去补文化课了. 下半个学期可能要以文化课为主了吧! 但周三.周日应该还是会正常参加训练的,但其他时 ...

  5. [UOJ 275/BZOJ4737] 【清华集训2016】组合数问题 (LUCAS定理的运用+数位DP)

    题面 传送门:UOJ Solution 这题的数位DP好蛋疼啊qwq 好吧,我们说回正题. 首先,我们先回忆一下LUCAS定理: \(C_n^m \equiv C_{n/p}^{m/p} \times ...

  6. 【学习笔记&训练记录】数位DP

    数位DP,即对数位进行拆分,利用数位来转移的一种DP,一般采用记忆化搜索,或者是先预处理再进行转移 一个比较大略的思想就是可以对于给定的大数,进行按数位进行固定来转移记录答案 区间类型的,可以考虑前缀 ...

  7. 2018牛客网暑假ACM多校训练赛(第四场)C Chiaki Sequence Reloaded (组合+计数) 或 数位dp

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round4-C.html 题目传送门 - https://www.no ...

  8. 牛客训练三:处女座和小姐姐(三)(数位dp)

    题目链接:传送门 思路:数位dp的记忆化搜索模板 从高位向低位枚举,逐位确定每一位的6的个数,dp[i][s]表示处理到第i条边,状态为s时的数字的个数. 注意,要使用long long类型. #in ...

  9. 【2019.7.20 NOIP模拟赛 T2】B(B)(数位DP)

    数位\(DP\) 首先考虑二进制数\(G(i)\)的一些性质: \(G(i)\)不可能有连续两位第\(x\)位和第\(x+1\)位都是\(1\).因为这样就可以进位到第\(x+2\)位.其余情况下,这 ...

随机推荐

  1. typedef struct和指针

    在学习链表时遇到了typedef已经用typedef定义的指针,不是很懂,某浪里有位博主的博文写的很详细,我直接粘过来 假设我们定义一个结构体: typedef struct ANSWER_HEADE ...

  2. Codeforces 915 F. Imbalance Value of a Tree(并查集)

    F. Imbalance Value of a Tree 题意: 给一颗带点权的树,求所有简单路径上最大点权和最小点权之差的总和. 思路: 所求问题可以看作求各路径上的最大值之和减各路径上的最小值之和 ...

  3. LVS集群之DR模式

    今天来讲LVS-DR模式集群实现负载均衡的搭建方法 环境 主机名 IP   系统 角色 dir DIP:192.168.199.9 VIP:192.168.199.8 rhel7.4 集群服务器 no ...

  4. POJ 3177 (Redundant Paths) —— (有重边,边双联通,无向图缩点)

    做到这里以后,总算是觉得tarjan算法已经有点入门了. 这题的题意是,给出若干个点和若干条边连接他们,在这个无向图中,问至少增加多少条边可以使得这个图变成边双联通图(即任意两点间都有至少两条没有重复 ...

  5. CPU分支预测器

    两篇结合就ok啦 1.https://www.jianshu.com/p/be389eeba589 2.https://blog.csdn.net/edonlii/article/details/87 ...

  6. 【软件工程】Alpha事后诸葛亮

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 参考邹欣老师的问题模板进行总结思考 一.设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的 ...

  7. ffmpe转码添加时间水印

    ffmpeg出直播流的时候 添加时间水印的话可以观察延迟 录制也方便查问题下面的命令 需要用到的字体自己百度下载一下或者到C:\Windows\Fonts复制一下 ffmpeg -stream_loo ...

  8. oracle获取当前月的第一个星期五

    -to_char(trunc(sysdate,'month'),'D') end || '号是当月的第一个星期五' from dual;

  9. redis多实例与主从同步及高级特性(数据过期机制,持久化存储)

    redis多实例 创建redis的存储目录 vim /usr/local/redis/conf/redis.conf #修改redis的配置文件 dir /data/redis/ #将存储路径配置修改 ...

  10. C#.net winform skin 皮肤大全

    C#.net winform skin 皮肤大全 1. 东日IrisSkin IrisSkin 共有两个版本,一个是IrisSkin.dll 用于.Net Framework1.0/1.1 和Iris ...