51nod 1623 完美消除(数位DP)
首先考虑一下给一个数如何求它需要多少次操作。
显然用一个单调栈就可以完成:塞入栈中,将比它大的所有数都弹出,如果栈中没有当前数,答案+1。
因为数的范围只有0~9,所以我们可以用一个二进制数来模拟这个栈,并塞到DP的状态里。
设$dp[i][j][k]$表示前i位数,已经进行了j次操作,栈的状态为k的方案数。
每次枚举一个数的时候,先把比这个数大的数在状态中都清零,再看看状态中有没有这个数,没有的话答案+1。
注意需要把状态初始值设为0在栈中...T T
![](/assets/blank.gif)
![](/assets/blank.gif)
#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)相关推荐
- stone/reverse/string/digit(完美消除)
stone/reverse/string/digit(完美消除) stone: [问题描述] 平平去海边度假,海边有一片美丽的鹅卵石滩.平平在鹅卵石滩上捡了 $n$ 块美丽的 鹅卵石,并把它们排成一个 ...
- 数位dp 的简单入门
时间紧张,就不讲那么详细了. 之前一直被深搜代码误解,以为数位dp 其实就是记忆化深搜...(虽说爆搜确实很舒服而且还好想) 但是后来发现数位dp 的标准格式其实是 预处理 + dp ...... 数 ...
- hdu2089 不要62 数位dp
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- Hdu 2089-不要62 数位dp
题目: http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Time Limit: 1000/1000 MS (Java/Others) Me ...
- mysql dp.cal 显示汉子_计算1到N中各个数字出现的次数 --数位DP
题意:给定一个数n,问从1到n中,0~9这10个数字分别出现了多少次.比如366这个数,3出现了1次,6出现了2次. 题解:<剑指offer>P174:<编程之美>P132 都 ...
- Bzoj 3652: 大新闻(数位dp)
以下内容来自ShallWe's Blog 题目 3652: 大新闻 Description Input Output \(1<=N<=10^18\) 解题报告 显然是一道数位dp的题目,观 ...
- 1043 幸运号码 数位DP
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1043 设dp[i][j]表示前i位数中,i位数的和为j时的所有情况. 转 ...
- HDU2089 不要62【数位DP+记忆化搜索】
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 算法复习——数位dp(不要62HUD2089)
题目 题目描述 杭州人称那些傻乎乎粘嗒嗒的人为 62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司 ...
最新文章
- ipad php mysql_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
- python3.7入门教程-python 3.7极速入门教程5循环
- 通过python建立一个web服务查看服务器上的文本、图片、视频等文件
- 【控制】复杂度定义及计算
- WEBMIN在命令行下的安装
- NLPIR使用(1)
- 订单生产计划表范本_生产计划表(生产计划表格模板)
- java网上书店模板_网上书店静态网站模板
- 华为ensp 交换机vlan配置
- opengl+qt+vs学习笔记1:软件下载安装以及配置
- HTTP传输大文件的方法
- 解决azkaban使用腾讯企业邮箱发邮件失败问题
- linux 做路由器系统下载文件,用Linux系统做路由器
- javascript学习-SVG
- #用PYTHON绘画五角星
- android平台获取手机IMSI,IMEI ,序列号,和 手机号的方法
- 步进电机驱动之相数、步距角、细分、拍数
- android 微信双服务,微信双开重大更新 微信最新版可双账号一键切换登陆了
- kafka 消费者详解
- zookeeper图形化的客户端工具
热门文章
- 关于ubuntu无法启动nginx的问题
- Ctrl+F5不能使用的问题
- xml02 XML编程(CRUD)增删查改
- http --- 用于HTTP调试的最小型Perl Web 服务器
- ES5-拓展 隐式数据类型转换
- Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+keepalived 实现高可用)...
- 做免费的EDM,EmailCar看中的是挖掘数据的价值
- yii2中的rules验证规则
- loadruner11 socket脚本-10053错误
- Gartner:2013年SIEM市场分析(MQ)