「 HDU P3555 」 Bomb
# 题目大意
给出 $\text{T}$ 个数,求 $[1,n]$ 中含 ‘49’ 的数的个数。
# 解题思路
求出不含 '49' 的数的个数,用总数减去就是答案。
数位 $DP$,用记忆化来做。
设 $dp[i][0]$ 表示 (这里按照从左往右数) 长度为 $i$ 并且最后一位不是 '4' 的数的个数。
设 $dp[i][1]$ 表示长度为 $i$ 并且最后一位是 '4' 的数的个数。
上面这两行看不懂可以先跳过去,是不是很神奇。
这样单说不好说。借助代码来说。具体的看代码里的注释。
# 放上代码
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long LL;
LL T, n, num[], cnt, dp[][];
inline void span(LL x) { //将数字张开分成一位一位
cnt = ;
while (x != ) {
num[++cnt] = x % ;
x /= ;
} //cnt就是长度
}
inline LL dfs(int l, bool flag, bool limit) { //枚举到了第l位,最高位是cnt
//flag表示前一位是否是4,limit表示枚举第l位是否存在限制
if(l == ) return ;
if(!limit && dp[l][flag]) return dp[l][flag];
//这里返回的原因是没有限制,所以这是一个通用的答案
LL ans = , mx = (limit ? num[l] : );
//这里这个mx是最大能枚举到几,如果这一位存在限制。
for(int i=; i<=mx; i++) {
if(flag && i == ) //判断是否含有‘49’
continue;
ans += dfs(l-, i == , i == mx && limit);
//如果这一位有限制并且现在枚举到的数正好达到最高限制,证明下一位也有限制
}
return limit ? ans : dp[l][flag] = ans;
//如果没有限制就可以将这个通用的答案记录下来
}
int main() {
scanf("%lld", &T);
while (T--) {
memset(num, , sizeof(num));
//这里记得要重置
scanf("%lld", &n);
span(n);
printf("%lld\n", n-(dfs(cnt, false, true)-));
//这里为什么要-1?
//因为在上面的函数中找到的不含‘49’的数包括‘0’,但是最后统计的时候是不包括‘0’的
}
}
「 HDU P3555 」 Bomb的更多相关文章
- Solution -「HDU 6875」Yajilin
\(\mathcal{Description}\) Link.(HDU 裂开了先放个私链 awa.) 在一个 \(n\times n\) 的方格图中,格子 \((i,j)\) 有权值 \(w_ ...
- Solution -「HDU 5498」Tree
\(\mathcal{Description}\) link. 给定一个 \(n\) 个结点 \(m\) 条边的无向图,\(q\) 次操作每次随机选出一条边.问 \(q\) 条边去重后构成生成 ...
- 「HDU - 2857」Mirror and Light(点关于直线的对称点)
题目链接 Mirror and Light 题意 一条直线代表镜子,一个入射光线上的点,一个反射光线上的点,求反射点.(都在一个二维平面内) 题解 找出入射光线关于镜子直线的对称点,然后和反射光线连边 ...
- 「国庆训练」Bomb(HDU-5934)
题意 给定\(n\)个炸弹,每个炸弹的坐标与代价与影响范围给定,炸弹会引爆影响范围内其他所有炸弹.求引爆所有炸弹的最小代价. 分析 先做\(n^2\)的循环,然后建图,对\(i\)能引爆\(j\)建边 ...
- 「 HDU P4734 」 F(x)
# 题目大意 对于一个数 $x$,它的每一位数字分别是 $A_{n}A_{n-1}A_{n-2}\cdots A_{2}A_{1}$,定义其权重 $f(x)=\sum_{i=1}^{n}\left(A ...
- 「 HDU 1978 」 How many ways
# 解题思路 记忆化搜索 一个点可以跳到的点,取决于它现在的能量.而且有一个显而易见的性质就是一条可行路径的终点和起点的横坐标之差加上纵坐标之差肯定小于等于起点的能量. 因为跳到一个点之后,能量和之前 ...
- 「 HDU P2089 」 不要62
和 HDOJ 3555 一样啊,只不过需要多判断个 ‘4’ 我有写 3555 直接去看那篇吧 这里只放代码 #include <iostream> #include <cstring ...
- 「 HDU P3336 」 Count the string
题目大意 给出一个长度为 $n$ 的字符串 $s$ 要求你求出 $s$ 的每一个前缀在 $s$ 中出现的次数之和.$n\le 200000$. 解题思路 暴力的对每一个前缀进行一次匹配,求出出现次数后 ...
- 「hdu 4845 」拯救大兵瑞恩 [CTSC 1999](状态压缩bfs & 分层图思想)
首先关于分层图思想详见2004的这个论文 https://wenku.baidu.com/view/dc57f205cc175527072208ad.html 这道题可以用状态压缩,我们对于每一把钥匙 ...
随机推荐
- 简单脱壳教程笔记(7)---手脱PECompact2.X壳
本笔记是针对ximo早期发的脱壳基础视频教程.整理的笔记.本笔记用到的工具下载地址: http://download.csdn.net/detail/obuyiseng/9466056 简单介绍: F ...
- SQLyog普通版与SQLyog企业版对比分析
这里,为什么要写这篇博客呢? 对于SQLyog普通版而言,只能复制到不同的数据库里,这样显得麻烦,当然,你也可以用语句来操作达到实现目的. 具体做法: MySQL复制旧表的结构及数据到新表 CREAT ...
- 动态更改Menu
好像没有现成的api可能获取menu完美方法,只有在创建menu时,用全局的menuItem记下, 在需要修改时修改. 1)全局量: MenuItem gMenuItem=NULL; 2)//创建菜 ...
- SQLALchemy之创建表,删除表
1.创建引擎 "数据库+第三方模块://用户名:密码@数据库服务端IP:端口号/数据库名?编码" engine = create_engine( "mysql+pymys ...
- POJ2187 Beauty Contest (旋转卡壳算法 求直径)
POJ2187 旋转卡壳算法如图 证明:对于直径AB 必然有某一时刻 A和B同时被卡住 所以旋转卡壳卡住的点集中必然存在直径 而卡壳过程显然是O(n)的 故可在O(n)时间内求出直径 凸包具有良好的性 ...
- bzoj4031 [HEOI2015]小Z的房间——矩阵树定理
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4031 矩阵树定理的模板题(第一次的矩阵树定理~): 有点细节,放在注释里了. 代码如下: # ...
- E20170612-sl
tampon n. 卫生棉塞; 止血棉塞; sanitary n. 公共厕所; adj. 卫生的; 清洁的; belonging n. 附属品,附件,属性; ...
- bzoj 1697: [Usaco2007 Feb]Cow Sorting牛排序【置换群】
至今都不知道置换群是个什么东西--题解说什么就是什么.jpg 以下来自hzwer:http://hzwer.com/3905.html #include<iostream> #includ ...
- NOIP前的刷题记录
因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数 组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...
- SpringCloud(Finchley版本)中Zull过滤器ResponseBoby返回中文乱码解决方案
Spring Cloud带有"Cloud"的字样,但它并不是云计算解决方案,而是在Spring Boot基础上构建的,用于快速构建分布式系统的通用模式的工具集.使用Spring C ...