题目链接:https://cn.vjudge.net/contest/278036#problem/A

具体思路:对于给定的数,我们按照位数进行运算,枚举每一位上可能的数,在枚举的时候需要注意几个条件,第一个,当前位上不能是4,第二如果前一位是6的话,当前的这一位不能是2,然后注意这个条件就可以了。

AC代码:

#include<iostream>
#include<stack>
#include<iomanip>
#include<cmath>
#include<queue>
#include<stdio.h>
#include<map>
#include<string>
#include<cstring>
using namespace std;
# define ll long long
const int maxn = 1e6+100;
int dig[10];
int dp[10];
int dfs(int len,bool fp,bool is6)//fp是用来判断是不是首位上的最大值,is6是用来判断当前的上一位是不是6
{
if(len==0)
return 1;
if(!fp&&dp[len][is6]!=-1)
return dp[len][is6];
int ans=0,fmax=fp?dig[len]:9;//如果是首位的话,只能枚举到首位,不是的话,0-9都是可以的。
for(int i=0; i<=fmax; i++)
{
if((i==4)||(is6&&i==2))
continue;
ans+=dfs(len-1,fp&&i==fmax,i==6);
}
if(!fp)
dp[len][is6]=ans;
return ans;
}
int fac(int n)
{
memset(dp,-1,sizeof(dp));
int num=0;
while(n)//把每一位取出来
{
dig[++num]=n%10;
n/=10;
}
return dfs(num,1,0);
}
int cal(int n,int m)
{
return fac(m)-fac(n);
}
int main()
{
int l,r;
while(~scanf("%d %d",&l,&r)&&(l+r))
{
printf("%d\n",cal(l-1,r));
}
return 0;
}

B题:

题目链接:https://cn.vjudge.net/contest/278036#problem/B

题目大意:让你求出1-n有多少个49,然后输出来。

具体思路:我们可以先把不满足情况的找出来,然后再总总数去减去这个数就可以了,但是要注意一点,再所有的不满足情况中,0也算是不满足的,但是要求n是大于1的,所以需要最终结果加上1.

#include<iostream>
#include<cstring>
#include<stack>
#include<stdio.h>
#include<iomanip>
#include<cmath>
#include<algorithm>
using namespace std;
# define ll long long
const int maxn = 20+5;
ll dig[maxn],dp[maxn][maxn];
ll dfs(ll len,bool fp,bool is4)
{
if(!len)
return 1;
if(!fp&&dp[len][is4]!=-1)
return dp[len][is4];
ll ans=0,fmax=fp?dig[len]:9;
for(int i=0; i<=fmax; i++)
{
if(i==9&&is4)
continue;
ans+=dfs(len-1,fp&&i==fmax,i==4);//这个地方的fp需要根据两个变量进行比较,上一位和当前的这一位。
}
dp[len][is4]=ans;
return ans;
}
ll cal(ll t)
{
memset(dp,-1,sizeof(dp));
int num=0;
while(t)
{
dig[++num]=t%10;
t/=10;
}
return dfs(num,1,0);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
ll n;
scanf("%lld",&n);
printf("%lld\n",n-cal(n)+1);
}
return 0;
}

数位DP入门(A - 不要62 HDU - 2089 &&B - Bomb HDU - 3555 )的更多相关文章

  1. 数位dp入门 hdu2089 不要62

    数位dp入门 hdu2089 不要62 题意: 给定一个区间[n,m] (0< n ≤ m<1000000),找出不含4和'62'的数的个数 (ps:开始以为直接暴力可以..貌似可以,但是 ...

  2. HDU 2089 不要62【数位DP入门题】

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. hdu3555 Bomb 数位DP入门

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 简单的数位DP入门题目 思路和hdu2089基本一样 直接贴代码了,代码里有详细的注释 代码: ...

  4. xbz分组题B 吉利数字 数位dp入门

    B吉利数字时限:1s [题目描述]算卦大湿biboyouyun最近得出一个神奇的结论,如果一个数字,它的各个数位相加能够被10整除,则称它为吉利数.现在叫你计算某个区间内有多少个吉利数字. [输入]第 ...

  5. HDU 2089 - 不要62 - [数位DP][入门题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...

  6. Hdu 2089 不要62 (数位dp入门题目)

    题目链接: Hdu 2089 不要62 题目描述: 给一个区间 [L, R] ,问区间内不含有4和62的数字有多少个? 解题思路: 以前也做过这个题目,但是空间复杂度是n.如果数据范围太大就GG了.今 ...

  7. HDU 2089 不要62(数位dp入门)

    题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 题解:这是数位DP的入门题了,首先要理解数DP的原理,DP[i][j]:代表第i位的第j值,举个栗子:如4715   数位数是从右向 ...

  8. 数位dp入门 HDU 2089 HDU 3555

    最基本的一类数位dp题,题目大意一般是在a~b的范围,满足某些要求的数字有多少个,而这些要求一般都是要包含或者不包含某些数字,或者一些带着数字性质的要求,一般来说暴力是可以解决这一类问题,可是当范围非 ...

  9. hdu:2089 ( 数位dp入门+模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 数位dp的模板题,统计一个区间内不含62的数字个数和不含4的数字个数,直接拿数位dp的板子敲就行 ...

随机推荐

  1. OneZero第二周第一次站立会议(2016.3.28)

    会议时间:2016年3月28日 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:分配第二周任务. 会议内容:由于老师要求4月1日进行Alpha发布,我们决定最优先完成消息录入功能.工作具体分配如下 1 ...

  2. latex添加eps文档

    latex添加图像时,要将.eps文档放在当前文件夹中,然后使用: % For one-column wide figures use\begin{figure}\begin{center}% Use ...

  3. The Best Path HDU - 5883(欧拉回路 && 欧拉路径)

    The Best Path Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  4. ZJOI2015地震后的幻想乡

    题面链接 洛咕 sol %%%_rqy 本来想写正常的状压,看到这篇题解就入坑了... 直接搬题解吧,写的太好了不用解释. 慢慢搬,先咕着QAQ #include<cstdio> #inc ...

  5. 【BZOJ1499】【NOI2005】瑰丽华尔兹(动态规划)

    [BZOJ1499]瑰丽华尔兹(动态规划) 题面 BZOJ 题解 先写部分分 设\(f[t][i][j]\)表示当前在\(t\)时刻,位置在\(i,j\)时走的最多的步数 这样子每一步要么停要么走 时 ...

  6. 洛谷P5283 & LOJ3048:[十二省联考2019]异或粽子——题解

    https://www.luogu.org/problemnew/show/P5283 https://loj.ac/problem/3048 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子 ...

  7. BZOJ 3224 普通平衡树 | 平衡树模板

    #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> # ...

  8. Javascript/jQuery关于JSON或数组集合的几种循环方法

    JavaScript遍历JSON或数组集合: /** * 根据json数据生成option树形控件 * 如果有children节点则自动生成树形数据 * @param {JSON} data * @p ...

  9. bzoj 4521: [Cqoi2016]手机号码

    感觉get到了一种数位dp的新姿势,加一位表示当前要填的数有没有限制(感觉以前的写法都太蠢了). 这么写有两个地方要注意: 1.每dp到一位时需要f[i][初始状态]++,相当于这位前都是前导零(这道 ...

  10. 简例s - Variables

    1. Set Variable 定义:Returns the given values which can then be assigned to a variables. 示例1: ${a}    ...