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 ...
随机推荐
- 读书笔记<深入理解JVM>01 关于OutOfMemoryError 堆空间的溢出
代码片段如下: package com.gosaint.shiro; import java.util.ArrayList; import java.util.List; public class H ...
- 【总结整理】dojo学习
Dojo Toolkit 的特性可以分到 4 个不同部分.这种划分使得开发人员可以将库大小保持到最小,确保应用程序性能不受大量 JavaScript 库下载的影响.例如,如果您只需要 Ajax 支持性 ...
- 一个典型的PHP分页实例代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 什么是FastCGI, PHP-FPM
CGI,FastCGI都是一套接口标准:是编程语言(比如php,python; python里面也有wsgi)与web服务器(比如Nginx)的通信标准(比如你跟老外交流,那么FastCGI就相当于是 ...
- Python字典内置方法
Python字典包含了以下内置方法: 序号 函数及描述 1 radiansdict.clear()删除字典内所有元素 2 radiansdict.copy()返回一个字典的浅复制 3 radiansd ...
- Entity Framework Tutorial Basics(30):
CRUD using Stored Procedure: In the previous chapter, we have seen how to get data using a stored pr ...
- SSH框架(四) struts2+spring3.0的登陆示例
(一)关键理念及需要注意的地方: 使用struts2+spring3.0的框架搭建web程序,就是使用spring来进行依赖注入(依赖注入请参考baidu上面的解释:http://baike.baid ...
- c语言常使用的函数,见到一个记一个
1.strdup() 功能:克隆一个副本,具有独立的内存空间 声明:char *strdup(char *str): 原型: char * __strdup (const char *s) { siz ...
- 对Dapper的一点改造
微软推出的ORM, EF在我开发的项目中给我的感觉一直都是慢.优点是高度封装的底层.便于开发. Dapper在多篇性能比较的网站中.都是名列前三.缺点是手写SQL,不便于开发. 如果能结合EF的优 ...
- UWP&WP8.1 中文网页字符乱码 字符乱码 UTF-8转GBK 解决方法
UWP 方法 async void Download() { /*新建HttpClient*/ HttpClient web_ = new HttpClient(); /*使用HttpClient的G ...