HDU3555 区间的数里面有49的个数(数位dp)
题目:区间的数里面有49的个数
分析:
dp[pos][0]:长度为pos的数中,不包含49的,前一位不为4的有多少个;
dp[pos][1]:长度为pos的数中,不包含49的,前一位为4的有多少个;
dp[pos][2]:长度为pos的数中,包含49的有多少个;
一开始我是打算先算不满足的,在算满足的;结果不行,可能这样算出来的数太大了所以不行吧;
通过这道题可以更加理解了(不要62)这个题目的sta 的表示 , 原来如此呀
#include<stdio.h>
#include<string.h>
using namespace std;
typedef long long ll;
int dig[];
ll dp[][];
/*
dp[pos][0]:长度为pos的数中,不包含49的,前一位不为4的有多少个;
dp[pos][1]:长度为pos的数中,不包含49的,前一位为4的有多少个;
dp[pos][2]:长度为pos的数中,包含49的有多少个;
*/
ll dfs(int pos,int pre,bool have49,bool limit)
{
if(pos==) return have49;
if(!limit)//首先满足没有上界限制
{
if(have49 && ~dp[pos][]) return dp[pos][];
if(!have49 && pre== && ~dp[pos][]) return dp[pos][];
if(!have49 && pre!= && ~dp[pos][]) return dp[pos][];
} int up=limit?dig[pos]:;
ll ans=;
for(int i=;i<=up;i++)
{
if(pre== && i==) ans+=dfs(pos-,i,,limit && i==up);
else ans+=dfs(pos-,i,have49,limit && i==up);
} if(!limit)
{
if(have49) dp[pos][]=ans;
else
{
if(pre==) dp[pos][]=ans;
else dp[pos][]=ans;
}
} return ans;
}
ll solve(ll x)
{
int pos=;
while(x)
{
dig[++pos]=x%;
x/=;
}
return dfs(pos,,,);
} int main()
{
int T;
ll N;
scanf("%d",&T);
while(T--)
{
scanf("%I64d",&N);
memset(dp,-,sizeof(dp));
printf("%I64d\n",solve(N));
}
}
HDU3555 区间的数里面有49的个数(数位dp)的更多相关文章
- 数位DP HDU3555
Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submi ...
- [bzoj1026][SCOI2009]windy数_数位dp
windy数 bzoj-1026 题目大意:求一段区间中的windy数个数. 注释:如果一个数任意相邻两位的差的绝对值都不小于2,这个数就是windy数,没有前导0.$区间边界<=2\cdot ...
- HDU-4518 吉哥系列故事——最终数 AC自动机+数位DP
题意:如果一个数中的某一段是长度大于2的菲波那契数,那么这个数就被定义为F数,前几个F数是13,21,34,55......将这些数字进行编号,a1 = 13, a2 = 21.现给定一个数n,输出和 ...
- BZOJ3209: 花神的数论题(数位DP)
题目: 3209: 花神的数论题 解析: 二进制的数位DP 因为\([1,n]\)中每一个数对应的二进制数是唯一的,我们枚举\(1\)的个数\(k\),计算有多少个数的二进制中有\(k\)个\(1\) ...
- SPOJ 3267 求区间不同数的个数
题意:给定一个数列,每次查询一个区间不同数的个数. 做法:离线+BIT维护.将查询按右端点排序.从左到右扫,如果该数之前出现过,则将之前出现过的位置相应删除:当前位置则添加1.这样做就保证每次扫描到的 ...
- hdu 5919--Sequence II(主席树--求区间不同数个数+区间第k大)
题目链接 Problem Description Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2 ...
- hdu 5919 主席树(区间不同数的个数 + 区间第k大)
Sequence II Time Limit: 9000/4500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tot ...
- 【树状数组】区间出现偶数次数的异或和(区间不同数的异或和)@ codeforce 703 D
[树状数组]区间出现偶数次数的异或和(区间不同数的异或和)@ codeforce 703 D PROBLEM 题目描述 初始给定n个卡片拍成一排,其中第i个卡片上的数为x[i]. 有q个询问,每次询问 ...
- HDU 5654 xiaoxin and his watermelon candy 离线树状数组 区间不同数的个数
xiaoxin and his watermelon candy 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5654 Description Du ...
随机推荐
- mybatis中in查询
xml配置 : <select id="selectPostIn" resultType="dasyskjcdtblVo"> SELECT SYS_ ...
- Linux下修改Mysql最大并发连接数
输入的命令如下: /usr/local/mysql/bin/mysqladmin -uroot -pyyyyyy variables |grep max_connections nano /etc/m ...
- android下db-journal文件作用
在学习数据库sqlite的过程中,发现在源文件包里除了生成db类型的数据库文件,还生成了db-journal类型的同名文件 查询网上资料后知道该文件是sqlite的一个临时的日志文件,主要用于sqli ...
- Ros学习——创建ROS消息和ROS服务
1.rosed rosed 是 rosbash 的一部分.利用它可以直接通过package名来获取到待编辑的文件而无需指定该文件的存储路径了. rosed默认的编辑器是vim.修改其他的,打开~/.b ...
- 框架和事务 非常 有用 hibernate和mybatis区别
1****第一章 Hibernate与MyBatis 章 开发对比 开发学习 Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用 ...
- 面试题: Struts2
1. Struts2与Struts1的联系与区别是什么?为什么要用Struts2? 答案: struts1与struts2都是mvc框架的经典实现模式. Struts2不是从Struts1升级而来,而 ...
- p3634 [APIO2012]守卫
传送门 分析 1.先预处理出不被0覆盖的点,然后对每个点处理出在它左边离他最近的点和在他右边理他最近的点. 2.对于每个至少存在一个忍者的区间,先将它左右边界处理为不被0所覆盖.排序后将包含其他区间的 ...
- PossibleOrders TopCoder - 1643
传送门 分析 先用并查集将所有相等元素连为一个,得到不同的元素共cnt种,之后我们的任务便转化为将这些元素分为k组(k≤cnt),所以我们不难得出dp式:dpij=dpi-1j-1*j+dpi-1j* ...
- Django框架 之 模板语言
Django框架 之 模板语言 浏览目录 标签 过滤器 一.标签 Tags 1.普通变量 普通变量用{{ }} 变量名由数字.字母.下划线组成 点.在模板语言中用来获取对象相应的属性值 示例: 1 2 ...
- 《Maven实战》笔记-9-版本管理
一.理想的发布版本,在项目构建时需要满足以下条件: 1.所有自动化测试应当全部通过: 2.项目没有配置任何快照版本的依赖: 3.项目没有任何快照版本的插件: 4.项目所包含的代码已经全部提交到版本控制 ...