动态规划晋级——HDU 3555 Bomb【数位DP详解】
转载请注明出处:http://blog.csdn.net/a1dark
分析:初学数位DP完全搞不懂、很多时候都是自己花大量时间去找规律、记得上次网络赛有道数位DP、硬是找规律给A了、那时候完全不知数位DP为何物、不过还是有很多时候要用数位DP、比如当一个数字超过了数组承受的极限、不能再打表AC、先看这道题、首先划分状态、然后初始化、最后从高位向低位状态转移、代码含详解
//dp[len][0]表示长度为len不含49的数量
//dp[len][1]表示长度为len不含44但以9开头的数字的数量
//dp[len][2]表示长度为len含有49的数量
#include<stdio.h>
#include<string.h>
__int64 dp[20][3];
int num[20];
int main(){
dp[0][0]=1;
for(int i=1;i<=20;i++){
dp[i][0]=dp[i-1][0]*10-dp[i-1][1];//要减去9开头的数
dp[i][1]=dp[i-1][0];//在不含49的数量中加9在开头
dp[i][2]=dp[i-1][2]*10+dp[i-1][1];//以前含49、这一位有10种选择+以前只含9这一位可以是4
}
int t;
scanf("%d",&t);
while(t--){
int len=1,last=0;
__int64 ans=0,n=0;
scanf("%I64d",&n);
memset(num,0,sizeof(num));
n++;
while(n>0){//用num数组来记录每一位的数字、为下面递推做准备
num[len]=n%10;
n/=10;
len++;
}
int flag=0;
for(int i=len;i>=1;i--){//从高位往低位递推
ans+=dp[i-1][2]*num[i];//如果后面含有49、那么这一位可以填1到(num[i]-1)
if(flag==1)//如果前一位挨着49
ans+=dp[i-1][0]*num[i];//那么加上这个是没问题的
if(flag==0&&num[i]>4)//如果前一位没有挨着49、但是这一位比4大
ans+=dp[i-1][1];//那么加上开头为9的是正确的、
if(last==4&&num[i]==9)//判断当前位和上一位是否能组成49
flag=1;
last=num[i];//当前位转移为上一位
}
printf("%I64d\n",ans);
}
return 0;
}
动态规划晋级——HDU 3555 Bomb【数位DP详解】的更多相关文章
- HDU 3555 Bomb 数位dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others) Mem ...
- HDU 3555 Bomb 数位DP 入门
给出n,问所有[0,n]区间内的数中,不含有49的数的个数 数位dp,记忆化搜索 dfs(int pos,bool pre,bool flag,bool e) pos:当前要枚举的位置 pre:当前要 ...
- HDU - 3555 - Bomb(数位DP)
链接: https://vjudge.net/problem/HDU-3555 题意: The counter-terrorists found a time bomb in the dust. Bu ...
- Bomb HDU - 3555 (数位DP)
Bomb HDU - 3555 (数位DP) The counter-terrorists found a time bomb in the dust. But this time the terro ...
- 数位DP 详解
序 天堂在左,战士向右 引言 数位DP在竞赛中的出现几率极低,但是如果不会数位DP,一旦考到就只能暴力骗分. 以下是数位DP详解,涉及到的例题有: [HDU2089]不要62 [HDU3652]B-n ...
- HDU(3555),数位DP
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others ...
- HDU 3555 Bomb (数位DP-记忆化搜索模板)
题意 求区间[1,n]内含有相邻49的数. 思路 比较简单的按位DP思路.这是第一次学习记忆化搜索式的数位DP,确实比递推形式的更好理解呐,而且也更通用~可以一般化: [数位DP模板总结] int d ...
- hud 3555 Bomb 数位dp
Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Subm ...
- 数位DP详解
算法使用范围 在一个区间里面求有多少个满足题目所给的约束条件的数,约束条件必须与数自身的属性有关 下面用kuangbin数位dp的题来介绍 例题 不要62 题意:在一个区间里面求出有多少个不含4和6 ...
随机推荐
- SVN全量备份+增量备份脚本
一.全量备份 环境:一台主SVN,一台备SVN(主要提供备份功能),后续可通过钩子脚本进行实时备份,后续发给大家. 工作原理:通过svn的hotcopy命令过行热备份,并进行一系列的检查,备份后通过r ...
- Visual Studio 2015和.Net 2015 预览版在线安装和ISO镜像安装光盘下载
微软刚刚宣布了 Visual Studio 2015和.Net 2015 预览版,并同时提供了下载. 微软在纽约正进行中的#Connect# 全球开发者在线大会上宣布了Visual Studio 20 ...
- WeX5是主要进行app开发吗?能开发微信App吗?
WeX5是一款html5开发工具,可以进行app开发,做出各种H5 App,同样也可以进行主要运行在PC的html5产品,. WeX5开发的应用,不仅可以在微信上运行,也可以直接手机浏览器运行,或者打 ...
- Android:启动引导页实现
前言 基本上现在所有的应用都会有一个欢迎界面,在欢迎界面对应用做一个整体的介绍,然后在跳入到主界面,这次要说的这个引导页就是带翻页的引导页.效果如下所示
- js 根据当前星期做跳转(代码段)
var week = [6,0,1,2,3,4,5]; $('.HotShop_head .HotShop_tab:eq('+week[new Date().getDay()]+')').click( ...
- Spark Streaming揭秘 Day27 Job产生机制
Spark Streaming揭秘 Day27 Job产生机制 今天主要讨论一个问题,就是除了DStream action以外,还有什么地方可以产生Job,这会有助于了解Spark Streaming ...
- linux设备驱动模型(kobject与kset)
Linux设备模型的目的:为内核建立一个统一的设备模型,从而又一个对系统结构的一般性抽象描述.换句话说,Linux设备模型提取了设备操作的共同属性,进行抽象,并将这部分共同的属性在内核中实现,而为需要 ...
- Matlab生成.dll文件在.NET中加载失败与平台的关系及解决方案
问题链接地址:http://bbs.elecfans.com/forum.php?mod=viewthread&tid=207995
- touches获得手指点击的坐标
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObjec ...
- iOS5编程--ARC在工程上的相关设置
在创建工程的时候,我们可以指定工程是否使用ARC技术,如下图 选中表示支持ARC, 在Beta5以前的版本中,不提供这个选项,非常麻烦. 如果是你拿到的工程,那么可以通过设置来改变,如下图所示 如果不 ...