大佬讲的清楚

[https://blog.csdn.net/wust_zzwh/article/details/52100392]

例子

不要62或4

l到r有多少个数不含62或者4

代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int a, b,shu[20],dp[20][2]; int dfs(int len, bool if6, bool shangxian)
{
if (len == 0)
return 1;
if (!shangxian && dp[len][if6])
return dp[len][if6];
int cnt = 0, maxx = (shangxian ? shu[len] : 9);
for (int i = 0; i <= maxx; i++)
{
if (i == 4 || if6 && i == 2)
continue;
cnt += dfs(len - 1, i == 6, shangxian && i == maxx);
}
return shangxian ? cnt : dp[len][if6] = cnt;
} int solve(int x)
{
memset(shu, 0, sizeof(shu));
int k = 0;
while (x)
{
shu[++k] = x % 10;
x /= 10;
}
return dfs(k, false, true);
} int main()
{
scanf("%d%d", &a, &b);
if(a==0&&b==0) return 0;
printf("%d\n", solve(b) - solve(a - 1));
return 0;
}

不要49

l到r有多少个数不含49

代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int w[20],dp[20][2];
//dp[i][0,1]代表前一位是否为某个数的情况下,i位(0~i个9)满足条件的个数
int dfs(int len,bool is4,bool limit){
if(len==0) return 1;
//注意
if(!limit&&dp[len][is4]) return dp[len][is4];
int sum=0,maxn=(limit?w[len]:9);
for(int i=0;i<=maxn;i++){
if(is4&&i==9) continue;
sum+=dfs(len-1,i==4,limit&&i==maxn);
}
return limit?sum:dp[len][is4]=sum;
}
int solve(int x){
int j=0;
memset(w,0,sizeof(w));
while(x){
w[++j]=x%10;
x/=10;
}
return dfs(j,0,1);
}
int main(){
int l,r;
while(~scanf("%d%d",&l,&r)&&(l+r)){
printf("%d\n",solve(r)-solve(l-1));
}
return 0;
}

动态规划-数位dp的更多相关文章

  1. 动态规划——数位dp

    通过先前在<动态规划——背包问题>中关于动态规划的初探,我们其实可以看到,动态规划其实不是像凸包.扩展欧几里得等是具体的算法,而是一种在解决问题中决策的思想.在不同的题目中,我们都需要根据 ...

  2. 模板 - 动态规划 - 数位dp

    #include<bits/stdc++.h> using namespace std; #define ll long long ]; ll dp[][/*可能需要的状态2*/];//不 ...

  3. 有关动态规划(主要是数位DP)的一点讨论

    动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法.20世纪50年代初美国数学家在研究多阶段决策过程的优化问题时, ...

  4. 动态规划晋级——HDU 3555 Bomb【数位DP详解】

    转载请注明出处:http://blog.csdn.net/a1dark 分析:初学数位DP完全搞不懂.很多时候都是自己花大量时间去找规律.记得上次网络赛有道数位DP.硬是找规律给A了.那时候完全不知数 ...

  5. 动态规划:数位DP

    数位dp一般应用于: 求出在给定区间[A,B]内,符合条件P(i)的数i的个数 条件P(i)一般与数的大小无关,而与 数的组成 有关 例题是一道BZOJ1833,让求出区间所有整数每个数字出现的次数 ...

  6. 动态规划专题(三)——数位DP

    前言 数位\(DP\) 真的是最恶心的\(DP\). 简介 看到那种给你两个数,让你求这两个数之间符合条件的数的个数,且这两个数非常大,这样的题目一般就是 数位\(DP\) 题. 数位\(DP\)一般 ...

  7. 「动态规划」-数位dp专题

    数位dp,今天学长讲的稍玄学,课下花了一会时间仔细看了一下,发现板子是挺好理解的,就在这里写一些: 数位dp主要就是搞一些在区间中,区间内的数满足题目中的条件的数的个数的一类题,题目一般都好理解,这时 ...

  8. P4317 花神的数论题 动态规划?数位DP

    思路:数位$DP$ 提交:5次(其实之前A过,但是调了调当初的程序.本次是2次AC的) 题解: 我们分别求出$sum(x)=i$,对于一个$i$,有几个$x$,然后我们就可以快速幂解决. 至于求个数用 ...

  9. 数位dp/记忆化搜索

    一.引例 #1033 : 交错和 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an  ...

随机推荐

  1. Android内嵌VLC实现播放网络视频,网络音频

    1.在对应模块的build.gradle文件中,添加依赖 //VlC implementation "de.mrmaffen:vlc-android-sdk:2.0.6" 2.布局 ...

  2. malloc和calloc用法

    malloc和calloc用法 #include <stdio.h> #include <stdlib.h> int main(){ int n; printf("i ...

  3. Lua代码规范

    以下规范,是在Unity中使用Lua做为开发语言,仅供参考. 1.格式规范 1. lua文件名统一小写,中间一律不加下划线分割 2. 类名首字母大写,多个词组成的类名,每个词的首字母大写,中间一律不加 ...

  4. RHEL/Centos7 安装图形化桌面

    Linux是一个多任务的多用户的操作系统,好多linux爱好者在安装完linux后经常遇到一个问题——没有图形化桌面.今天小编在安装RHEL7的时候,一步留神没有安装图形化桌面,下面分享一下安装图形化 ...

  5. echo '1'.print(2)+3; 的输出结果为什么是511

    今天看到一道有趣的题目,如上所示.结果为什么会是511呢? 这个结果的计算分为三步来理解: 首先计算的是 右边print(2)+3,这个你可以直接理解成print(2+3),得到的结果是5.而prin ...

  6. live555源码学习1---Socket流程架构图

    怎么说呢,换了工作环境,好多软件公司禁止使用了,有道笔记也无法使用了.发现博客园还可以上传图片,以后只能在这里记录了. 越发的感觉需要尽快把live555的代码拿下.因为工作环境问题,webrtc的源 ...

  7. LeetCode算法题-Construct Quad Tree(Java实现)

    这是悦乐书的第224次更新,第237篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第91题(顺位题号是427).我们想使用四叉树来存储N×N布尔网格.网格中的每个单元格只 ...

  8. 《Java大学教程》—第17章 Java聚焦类框架

    由所有聚焦类构成,在java.util包中,包含三个重要接口:*    List列表:元素为单个对象,元素在列表中是有序.可重复*    Set集合:元素为单个对象,元素在集合中无序.不可重复*    ...

  9. ES5-ES6-ES7_对象的扩展

    简化的对象写法 省略同名的属性值,省略方法的function let x = 1; let y = 2; let point = { x, y, setX (x) { this.x = x } }; ...

  10. Loj #2731 「JOISC 2016 Day 1」棋盘游戏

    Loj 2731 「JOISC 2016 Day 1」棋盘游戏 JOI 君有一个棋盘,棋盘上有 \(N\) 行 \(3\) 列 的格子.JOI 君有若干棋子,并想用它们来玩一个游戏.初始状态棋盘上至少 ...