Bomb HDU - 3555【数位dp】

Bomb HDU - 3555
The counter-terrorists found a time bomb in the dust. But this time the terrorists improve on the time bomb. The number sequence of the time bomb counts from 1 to N. If the current number sequence includes the sub-sequence “49”, the power of the blast would add one point.
Now the counter-terrorist knows the number N. They want to know the final points of the power. Can you help them?
Input
The first line of input consists of an integer T (1 <= T <= 10000), indicating the number of test cases. For each test case, there will be an integer N (1 <= N <= 2^63-1) as the description.

The input terminates by end of file marker.
Output
For each test case, output an integer indicating the final points of the power.
Sample Input
3
1
50
500
Sample Output
0
1
15

Hint
From 1 to 500, the numbers that include the sub-sequence “49” are “49”,“149”,“249”,“349”,“449”,“490”,“491”,“492”,“493”,“494”,“495”,“496”,“497”,“498”,“499”,
so the answer is 15.

题目大意:
已知所有含有49的数字是不合法的,问nnn以内有多少不合法的数字。

解题思路:
假设dp[i][j]dp[i][j]dp[i][j]代表第iii以下所有合法的数字的数目,jjj代表当前位是否是4.
因此,我们可以先将数字按位拆分放在数组中,从最高位开始,我们可以知道,如果当前位不为4,那么此时的dp[i][0]dp[i][0]dp[i][0]就会等于其下一位的所有情况的累加,而这种累加我们将其存在dp[i−1][0]dp[i-1][0]dp[i1][0]dp[i−1][1]dp[i-1][1]dp[i1][1]中,只要算过一次,当下一次遇到时就可直接调用,大大降低了重复计算次数,当当前为为4时,将其存入dp[i][1]dp[i][1]dp[i][1]中,遍历下一位时仅需跳过9即可,其他情况相同。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <set>
#include <utility>
#include <sstream>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define inf 0x3f3f3f3f
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define lep(i,l,r) for(int i=l;i>=r;i--)
#define ms(arr) memset(arr,0,sizeof(arr))
//priority_queue<int,vector<int> ,greater<int> >q;
const int maxn = (int)1e5 + 5;
const ll mod = 1e9+7;
ll dp[25][2];
ll num[25];
int cnt;
ll dfs(int wei,bool limit,bool is4) {if(wei==0) return 1;if(!limit&&dp[wei][is4]) return dp[wei][is4];int maxnum;if(limit) maxnum=num[wei];else maxnum=9;ll nape=0;for(int i=0;i<=maxnum;i++) {if(is4&&i==9) continue;nape+=dfs(wei-1,limit&&i==maxnum,i==4);}if(!limit) dp[wei][is4]=nape;return nape;
}
int main() 
{#ifndef ONLINE_JUDGE//freopen("in.txt", "r", stdin);#endif//freopen("out.txt", "w", stdout);//ios::sync_with_stdio(0),cin.tie(0);int T;scanf("%d",&T);while(T--) {ll n,n1;cnt=0;scanf("%lld",&n);n1=n;while(n) {num[++cnt]=n%10;n=n/10;}printf("%lld\n",n1+1-dfs(cnt,true,false));}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不要62 HDU - 2089【数位dp】

不要62 HDU - 2089 杭州人称那些傻乎乎粘嗒嗒的人为62&#xff08;音&#xff1a;laoer&#xff09;。 杭州交通管理局经常会扩充一些的士车牌照&#xff0c;新近出来一个好消息&#xff0c;以后上牌照&#xff0c;不再含有不吉利的数字了&#xff0c;这样一来&#xff0c;就可…

PACKING【二维01背包】

PACKING 时间限制: 1 Sec 内存限制: 128 MB 提交: 278 解决: 24 [提交] [状态] [命题人:admin] 题目描述 It was bound to happen. Modernisation has reached the North Pole. Faced with escalating costs for feeding Santa Claus and the reindeer, and serious difficulti…

机器人军团【动态规划】

机器人军团 时间限制: 1 Sec 内存限制: 64 MB 提交: 279 解决: 139 [提交] [状态] [命题人:admin] 题目描述 邪狼&#xff1a;“怎么感觉这些机器人比我还聪明&#xff1f;不是说人工智能永远不能超越人类吗&#xff1f;” 天顶星人&#xff1a;“你们真是目光短浅&#xff0c…

【动态规划】抄近路

【动态规划】抄近路 时间限制: 1 Sec 内存限制: 64 MB 提交: 105 解决: 68 [提交] [状态] [命题人:admin] 题目描述 “最近不知道怎么回事&#xff0c;感觉我们这个城市变成了一个神奇的地方&#xff0c;有时在路上走着走着人就消失了&#xff01;走着走着突然又有人出现了&…

【动态规划】魔法石矿

【动态规划】魔法石矿 时间限制: 1 Sec 内存限制: 64 MB 提交: 116 解决: 27 [提交] [状态] [命题人:admin] 题目描述 为了找到回家的路&#xff0c;张琪曼施展魔法&#xff0c;从高维空间召唤出了一种叫作“读者”的生物&#xff0c;据说“读者”这种生物无所不能&#xff0c;…

Knapsack Cryptosystem【折半+查找】

链接&#xff1a;https://ac.nowcoder.com/acm/contest/889/D 来源&#xff1a;牛客网 Amy asks Mr. B problem D. Please help Mr. B to solve the following problem. Amy wants to crack Merkle–Hellman knapsack cryptosystem. Please help it. Given an array {ai} wi…

All men are brothers【并查集+数学】

链接&#xff1a;https://ac.nowcoder.com/acm/contest/889/E 来源&#xff1a;牛客网 题目描述 Amy asks Mr. B problem E. Please help Mr. B to solve the following problem. There are n people, who don’t know each other at the beginning. There are m turns. In e…

Light bulbs【差分】

19.98% 1000ms 8192K There are NN light bulbs indexed from 00 to N-1N−1. Initially, all of them are off. A FLIP operation switches the state of a contiguous subset of bulbs. FLIP(L, R)FLIP(L,R)means to flip all bulbs xx such that L \leq x \leq RL≤x≤R. S…

Digit sum【暴力+打表】

Digit sum 33.57% 2000ms 131072K A digit sum S_b(n)S b ​ (n) is a sum of the base-bb digits of nn. Such as S_{10}(233) 2 3 3 8S 10 ​ (233)2338, S_{2}(8)1 0 0 1S 2 ​ (8)1001, S_{2}(7)1 1 1 3S 2 ​ (7)1113. Given NN and bb, you need to calcu…

P1040 加分二叉树【dp+深搜】

题目描述 设一个nn个节点的二叉树tree的中序遍历为&#xff08;1,2,3,…,n1,2,3,…,n&#xff09;&#xff0c;其中数字1,2,3,…,n1,2,3,…,n为节点编号。每个节点都有一个分数&#xff08;均为正整数&#xff09;&#xff0c;记第ii个节点的分数为di,treedi,tree及它的每个子树…

Helloworld【C#】

c#Helloworld 题目描述 请输出样例所示内容 输出 样例输出 ********** Hello,world! ********** using System;namespace ConsoleApp1 {class Program{static void Main(string[] args){Console.WriteLine("**********");Console.WriteLine("Hello,world!&…

判断闰年【C#】

判断闰年 题目描述 使用C#编写一个控制台应用。输入-一个年份&#xff0c;判断是否润年(被4整除&#xff0c;且不被100整除&#xff0c;或者被400整除)。 是闰年输出yes&#xff0c;不是输出no 输入 一个年份 输出 yes或者no 样例输入 1996 样例输出 yes using Syst…

采用递归求第n位数【C#】

题目描述 一数列的规则如下&#xff1a;1、1、2、3、5、8、13、21、34......。求第n位数是多少&#xff1f; 输入 输入一个正整数&#xff0c;代表求第几位数字 输出 输出第n位数字 样例输入 30 样例输出 832040 提示 输入数字必须大于零 using System;namespace C…

歌手的分数【C#】

歌手的分数 题目描述 一青年歌手参加比赛。使用C#编写-一个控制台应用&#xff0c;输入10位评委打分(分值只能为正整数)&#xff0c;计算并输出歌手的平均分(去掉一一个最高分和一一个最低分)。平均分以double数据类型输出。 输入 1 2 3 4 5 6 7 8 9 10 输出 5.5 样例输…

冒泡排序算法(C#)

冒泡排序算法&#xff08;C#&#xff09; 题目描述 使用C#编写一个控制台应用。输入10个整数存入数组中&#xff0c;然后使用冒泡排序算法对一维数组的元素从小到大进行排序&#xff0c;并输出。 输入 在控制台中输入数字&#xff0c;存入一维数组 输出 输出排序后的数…

水仙花数【C#】

题目描述 春天是鲜花的季节&#xff0c;水仙花就是其中最迷人的代表&#xff0c;数学上有个水仙花数&#xff0c;他是这样定义的&#xff1a; “水仙花数”是指一个三位数&#xff0c;它的各位数字的立方和等于其本身&#xff0c;比如&#xff1a;1531^35^33^3。 现在要求输出…

C#异或运算符的使用【C#】

C#异或运算符的使用 题目描述 编写一个控制台应用&#xff0c;采用异或运算符&#xff0c;实现两个整型变量值的交换。并在Program类的Main进行验证。 输入 依次输入2个整数 输出 输出交换前、后两个变量的值 样例输入 12 78样例输出 before exchange first12,second7…

C#类方法【C#】

C#类方法 题目描述 在类Class1中&#xff0c;编写一个类方法IsEven(string number)用于输出参数的奇偶性。并在Program类的Main进行验证性输出。 class Program { static void Main(string[] args) { Console.Write("Input Integer:&quo…

C#中的Switch语句【C#】

C#中的Switch语句 题目描述 编写一个控制台应用&#xff0c;实现以下功能&#xff1a;根据输入的字符&#xff0c;输出通过、不通过和输入成绩无效。 &#xff08;1&#xff09;无论输入A、B、C、D&#xff0c;都输出通过&#xff1b; &#xff08;2&#xff09;输入E&#x…

c#输出最大值、最小值和平均值(A)【C#】

c#输出最大值、最小值和平均值(A) 题目描述 使用C#编写一个控制台应用。输入10个正整数存入数组中&#xff0c;输出最大值、最小值和平均值 输入 输入10个正整数 输出 最大值、最小值和平均值 样例输入 1 2 3 4 5 6 7 8 9 10 样例输出 10 1 5.5 using System;namesp…