hdu_3555 bomb
数位动态规划
数位动态规划是求解一个大区间[L, R]中间满足条件Q的所有数字的个数(或者和,或其他)的一种方法。它通过分析每一位上的数字,一般用 dp[len][digit][...] 来表示状态“len位长的数字,最高位数字为digit所具有的xx特性”,利用记忆化搜索保存中间结果,从而加快求解速度。
通过求 f(n) 从0到n中满足条件Q的数字的个数,则所求的结果为 f(R) - f(L-1).
题目大意
给定数字n,找出从0到n中满足条件“数字k中有49(4和9连续)存在”的数字的个数。
题目分析
直接数位dp即可。
实现
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
typedef long long ll;
ll dp[30][10]; //dp[len][digit]表示长度为len,且最高位为digit的满足条件Q的数字个数
ll base[30];
int bits[30];
ll Dfs(int len, int digit, bool end_flag, ll n){if (len <= 1)return 0;if (!end_flag && dp[len][digit] != -1)return dp[len][digit];ll ans = 0;int end = end_flag ? bits[len - 2] : 9;for (int i = 0; i <= end; i++){ if (digit == 4 && i == 9){if (end_flag)ans += (1 + n % base[len - 2]);elseans += base[len - 2];}elseans += Dfs(len - 1, i, end_flag && (i == end), n);}if (!end_flag)dp[len][digit] = ans;return ans;
}
int Init(ll n){memset(bits, 0, sizeof(bits));int k = 0;base[0] = 1;while (n){ bits[k++] = n % 10;base[k] = base[k - 1] * 10;n /= 10;}return k;
}
ll Solve(ll n){int len = Init(n);return Dfs(len + 1, 0, true, n);
}
int main(){int T;ll num;scanf("%d", &T);memset(dp, -1, sizeof(dp));while (T--){scanf("%I64d", &num);ll ret = Solve(num);printf("%I64d\n", ret);}return 0;
}
在数据范围较大的时候,使用 long long int类型,但要注意所有使用long long int类型的变量被调用的函数中,参数形式均保持一致为long long int。
hdu_3555 bomb相关推荐
- JZOJ 5923. 【NOIP2018模拟10.23】Bomb
Description 常数国与 Hack 国近年来战火纷飞. 常数国共有 n 个城市,每两个城市之间均有一条交通线联通.如今常数国遭到 Hack 国的重创,岌岌可危.Hack 国国王小 K 决定轰炸 ...
- HDU 3555 - Bomb
第一道数位dp,属于基础模板,又自卑小时没学好数数了,只是不清楚为什么大家的dp定义都是相同的,很显然么,难道我写的是怪胎... /* ID:esxgx1 LANG:C++ PROG:hdu3555 ...
- H - Message Bomb Gym - 102798H
H - Message Bomb Gym - 102798H 题意: 有n个团队,m个人,s个操作 操作1:学生x加入y团队 操作2:学生x推出y团队 操作3:学生x在团队y发送一个信号,在团队y内的 ...
- [精品]CSAPP Bomb Lab 解题报告(七)——隐藏关卡
接上篇[精品]CSAPP Bomb Lab 解题报告(六) gdb常用指令 设置Intel代码格式:set disassembly-flavor intel 查看反汇编代码:disas phase_1 ...
- [精品]CSAPP Bomb Lab 解题报告(六)
接上篇[精品]CSAPP Bomb Lab 解题报告(五) gdb常用指令 设置Intel代码格式:set disassembly-flavor intel 查看反汇编代码:disas phase_1 ...
- [精品]CSAPP Bomb Lab 解题报告(五)
接上篇[精品]CSAPP Bomb Lab 解题报告(四) gdb常用指令 设置Intel代码格式:set disassembly-flavor intel 查看反汇编代码:disas phase_1 ...
- [精品]CSAPP Bomb Lab 解题报告(四)
接上篇[精品]CSAPP Bomb Lab 解题报告(三) gdb常用指令 设置Intel代码格式:set disassembly-flavor intel 查看反汇编代码:disas phase_1 ...
- [精品]CSAPP Bomb Lab 解题报告(三)
接上篇[精品]CSAPP Bomb Lab 解题报告(二) gdb常用指令 设置Intel代码格式:set disassembly-flavor intel 查看反汇编代码:disas phase_1 ...
- [精品]CSAPP Bomb Lab 解题报告(二)
接上篇[精品]CSAPP Bomb Lab 解题报告(一) gdb常用指令 设置Intel代码格式:set disassembly-flavor intel 查看反汇编代码:disas phase_1 ...
最新文章
- 关于unity的一个不错的插件平台
- 【Oracle 常用查询】oracle表空间使用率统计查询
- 低级键盘钩子,在WIN7以上版本的问题
- thrift多平台安装
- android 支付宝和微信支付封装,Android支付宝和微信支付集成
- 洛谷P3371-【模板】单源最短路【SPFA】
- war3必须安装的游戏组件_在单独的WAR组件中对SPA资源和API实现进行分区
- 【python接口自动化-requests库】【三】优化重构requests方法
- Python nltk包
- 年前辞职-WCF入门学习(5)
- 超全的JS重新加载当前页面的几种方式
- 基于SSM框架的志愿者管理系统
- 发票信息提取系统解决方案(纸质发票、电子发票)
- Error response from daemon: driver failed programming external connectivity on endpoint dz-redis
- 使用IDEA运行OnlyOffice的Java示例
- 【java】BMI:体重指数,又称身体质量指数,英文为Body Mass Index,简称BMI),是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。
- Vue 开发必须知道的 36 个技巧【近1W字】
- you-get详细配置教程
- 前端:使用CSS3实现酷炫的3D旋转透视
- 2022年低压电工考试试题模拟考试平台操作