首先考虑一下给一个数如何求它需要多少次操作。

  显然用一个单调栈就可以完成:塞入栈中,将比它大的所有数都弹出,如果栈中没有当前数,答案+1。

  因为数的范围只有0~9,所以我们可以用一个二进制数来模拟这个栈,并塞到DP的状态里。

  设$dp[i][j][k]$表示前i位数,已经进行了j次操作,栈的状态为k的方案数。

  每次枚举一个数的时候,先把比这个数大的数在状态中都清零,再看看状态中有没有这个数,没有的话答案+1。

  注意需要把状态初始值设为0在栈中...T T

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#define ll long long
using namespace std;
ll l, r, K;
ll dp[20][20][1<<10];
int a[20];
ll dfs(int pos, int k, int st, bool limit)
{if(!pos) return k==K;if(!limit && dp[pos][k][st]!=-1) return dp[pos][k][st];int up=limit?a[pos]:9; ll ans=0;for(int i=0;i<=up;i++){int now=st;for(int j=i+1;j<=9;j++) now^=((now & (1<<j))!=0)<<j;if(st&(1<<i)) ans+=dfs(pos-1, k, now, limit && i==up);else if(k<K) ans+=dfs(pos-1, k+1, now|(1<<i), limit && i==up);}if(!limit) dp[pos][k][st]=ans;return ans;
}
ll solve(ll x)
{int pos=0;while(x) a[++pos]=x%10, x/=10;return dfs(pos, 0, 1, 1);
}
int main()
{memset(dp, -1, sizeof(dp));scanf("%lld%lld%lld", &l, &r, &K);printf("%lld\n", solve(r)-solve(l-1));
}

View Code

转载于:https://www.cnblogs.com/Sakits/p/8034800.html

51nod 1623 完美消除(数位DP)相关推荐

  1. stone/reverse/string/digit(完美消除)

    stone/reverse/string/digit(完美消除) stone: [问题描述] 平平去海边度假,海边有一片美丽的鹅卵石滩.平平在鹅卵石滩上捡了 $n$ 块美丽的 鹅卵石,并把它们排成一个 ...

  2. 数位dp 的简单入门

    时间紧张,就不讲那么详细了. 之前一直被深搜代码误解,以为数位dp 其实就是记忆化深搜...(虽说爆搜确实很舒服而且还好想) 但是后来发现数位dp 的标准格式其实是 预处理 + dp ...... 数 ...

  3. hdu2089 不要62 数位dp

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

  4. Hdu 2089-不要62 数位dp

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Time Limit: 1000/1000 MS (Java/Others)    Me ...

  5. mysql dp.cal 显示汉子_计算1到N中各个数字出现的次数 --数位DP

    题意:给定一个数n,问从1到n中,0~9这10个数字分别出现了多少次.比如366这个数,3出现了1次,6出现了2次. 题解:<剑指offer>P174:<编程之美>P132 都 ...

  6. Bzoj 3652: 大新闻(数位dp)

    以下内容来自ShallWe's Blog 题目 3652: 大新闻 Description Input Output \(1<=N<=10^18\) 解题报告 显然是一道数位dp的题目,观 ...

  7. 1043 幸运号码 数位DP

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1043 设dp[i][j]表示前i位数中,i位数的和为j时的所有情况. 转 ...

  8. HDU2089 不要62【数位DP+记忆化搜索】

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

  9. 算法复习——数位dp(不要62HUD2089)

    题目 题目描述 杭州人称那些傻乎乎粘嗒嗒的人为 62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司 ...

最新文章

  1. ipad php mysql_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
  2. python3.7入门教程-python 3.7极速入门教程5循环
  3. 通过python建立一个web服务查看服务器上的文本、图片、视频等文件
  4. 【控制】复杂度定义及计算
  5. WEBMIN在命令行下的安装
  6. NLPIR使用(1)
  7. 订单生产计划表范本_生产计划表(生产计划表格模板)
  8. java网上书店模板_网上书店静态网站模板
  9. 华为ensp 交换机vlan配置
  10. opengl+qt+vs学习笔记1:软件下载安装以及配置
  11. HTTP传输大文件的方法
  12. 解决azkaban使用腾讯企业邮箱发邮件失败问题
  13. linux 做路由器系统下载文件,用Linux系统做路由器
  14. javascript学习-SVG
  15. #用PYTHON绘画五角星
  16. android平台获取手机IMSI,IMEI ,序列号,和 手机号的方法
  17. 步进电机驱动之相数、步距角、细分、拍数
  18. android 微信双服务,微信双开重大更新 微信最新版可双账号一键切换登陆了
  19. kafka 消费者详解
  20. zookeeper图形化的客户端工具

热门文章

  1. 关于ubuntu无法启动nginx的问题
  2. Ctrl+F5不能使用的问题
  3. xml02 XML编程(CRUD)增删查改
  4. http --- 用于HTTP调试的最小型Perl Web 服务器
  5. ES5-拓展 隐式数据类型转换
  6. Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+keepalived 实现高可用)...
  7. 做免费的EDM,EmailCar看中的是挖掘数据的价值
  8. yii2中的rules验证规则
  9. loadruner11 socket脚本-10053错误
  10. Gartner:2013年SIEM市场分析(MQ)