开学之后完全没时间写博客....
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)的更多相关文章
-
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 ...
-
数位DP HDU - 2089 不要62
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
-
专题训练之数位DP
推荐以下一篇博客:https://blog.csdn.net/wust_zzwh/article/details/52100392 1.(HDOJ2089)http://acm.hdu.edu.cn/ ...
-
2019年5月训练记录(更新ing)
前言 \(ZJOI\)正式结束了. 但期中考试只考了年级\(216\),退役既视感... 于是就被抓回去补文化课了. 下半个学期可能要以文化课为主了吧! 但周三.周日应该还是会正常参加训练的,但其他时 ...
-
[UOJ 275/BZOJ4737] 【清华集训2016】组合数问题 (LUCAS定理的运用+数位DP)
题面 传送门:UOJ Solution 这题的数位DP好蛋疼啊qwq 好吧,我们说回正题. 首先,我们先回忆一下LUCAS定理: \(C_n^m \equiv C_{n/p}^{m/p} \times ...
-
【学习笔记&;训练记录】数位DP
数位DP,即对数位进行拆分,利用数位来转移的一种DP,一般采用记忆化搜索,或者是先预处理再进行转移 一个比较大略的思想就是可以对于给定的大数,进行按数位进行固定来转移记录答案 区间类型的,可以考虑前缀 ...
-
2018牛客网暑假ACM多校训练赛(第四场)C Chiaki Sequence Reloaded (组合+计数) 或 数位dp
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round4-C.html 题目传送门 - https://www.no ...
-
牛客训练三:处女座和小姐姐(三)(数位dp)
题目链接:传送门 思路:数位dp的记忆化搜索模板 从高位向低位枚举,逐位确定每一位的6的个数,dp[i][s]表示处理到第i条边,状态为s时的数字的个数. 注意,要使用long long类型. #in ...
-
【2019.7.20 NOIP模拟赛 T2】B(B)(数位DP)
数位\(DP\) 首先考虑二进制数\(G(i)\)的一些性质: \(G(i)\)不可能有连续两位第\(x\)位和第\(x+1\)位都是\(1\).因为这样就可以进位到第\(x+2\)位.其余情况下,这 ...
随机推荐
-
java集合类(三)About Iterator &; Vector(Stack)
接上篇:java集合类学习(二) Talk about “Iterator”: 任何容器类,在插入元素后,还需要取回元素,因为这是容器的最基本工作.对于一般的容器,插入有add()相关方法(List, ...
-
BZOJ_1052_[HAOI2007]_覆盖问题_(二分+贪心)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1052 网格图,给出\(n\)个点,要求用3个边长相同的正方形覆盖所有点,求最小边长. 分析 显 ...
-
Let&#39;s Format Css Documents
每次想参考一些好看网站的时候,打开css文档都是一行的,琢磨了下就自己写了块短短的代码,各路Java大神别笑我呀.^_^ 复制粘贴控制台的输出就好了.(瞬间觉得跟上大神的脚步了←_←) package ...
-
我想操作的是利用SqlDataAdapter的几个Command属性(InsertCommand,UpdateCommand,DeleteCommand)来更新数据库
我想操作的是利用SqlDataAdapter的几个Command属性(InsertCommand,UpdateCommand,DeleteCommand)来更新数据库代码:SqlConnection ...
-
vertical-align 与 line-height 傻傻分不清??
要说吧,咱家是个菜鸟,以前遇见垂直居中的东东,也是现查现用,其中最长遇到的东西就是 vertical-align 和 line-height,似乎这俩个兄弟都可以实现居中对齐,不过窃以为二者还是有区别 ...
-
cpp(第十章)
1. const class & func(const class &) const { do something.. } 第一个const返回后的类不允许被赋值,第二个const不允 ...
-
ThreadLocal经典分页
package com.netease.live.admin.util; import com.netease.live.common.util.Constant; /** * * @author b ...
-
Spring【DAO模块】就是这么简单
前言 上一篇Spring博文主要讲解了如何使用Spring来实现AOP编程,本博文主要讲解Spring的DAO模块对JDBC的支持,以及Spring对事务的控制... 对于JDBC而言,我们肯定不会陌 ...
-
互联网寒冬,阿里Ant Design还开坑,程序员该何去何从?
金山都成立三十年了,不得不感叹中国在这三十年中,互联网确实是一步一步的在改变人们生活的方方面面,随着国家的发展,一大批企业搭上了互联网这趟高速列车走过了这几十年的风风雨雨,当然也造就了一批批传统行业无 ...
-
Linux Shell 文本处理工具集锦(转载)
内容目录: find 文件查找 grep 文本搜索 xargs 命令行参数转换 sort 排序 uniq 消除重复行 用tr进行转换 cut 按列切分文本 paste 按列拼接文本 wc 统计行和字符 ...