[51Nod1623] 完美消除
$solution:$
首先我们可以发现一个结论,对于一个数 $x$ ,它的最低修改次数为它每位与前去中是否都比此位上的数大,有则答案 $-1$ 。因为若有小数则没有办法将其答案贡献变低。
这个东西可以直接单调栈维护一个递增序列。
所以这样 $dp$ 状态也很显然了,设 $f_{i,j,sta}$ 表示当前到 $i$ 位,答案为 $j$ ,$sta$ 表示当前栈中 $0-9$ 是否在栈中。
简单数位转移即可。
时间复杂度 $O(10\times 18^2 \times 2^{10})$ 。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define int long long
inline int read(){
int f=,ans=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
const int MAXN=;
int dig[],f[MAXN][MAXN][<<];
int l,r,k,cnt;
void debug(int sta){
int Dig[];
Dig[]=;
while(sta){
Dig[++Dig[]]=sta%;
sta/=;
}
for(int i=Dig[];i>=;i--) printf("%d ",Dig[i]);printf("\n");
return ;
}
int dfs(int ps,int K,int sta,int done){
if(!done&&f[ps][K][sta]!=-) return f[ps][K][sta];
if(ps==){
if(K==k) return ;
return ;
}
int end,Ans=;
if(done) end=dig[ps];
else end=;
for(int i=;i<=end;i++){
int S=sta;
for(int j=i+;j<=;j++) if(S&(<<j)) S-=(<<j);
if(S&(<<i)) Ans+=dfs(ps-,K,S,done&(i==dig[ps]));
else Ans+=dfs(ps-,K+,S+(<<i),done&(i==dig[ps]));
}
if(done==) f[ps][K][sta]=Ans;
return Ans;
}
int solve(int x){
dig[]=;
while(x){
dig[++dig[]]=x%;
x/=;
}
return dfs(dig[],,,);
}
signed main(){
freopen("digit.in","r",stdin);
freopen("digit.out","w",stdout);
memset(f,-,sizeof(f));
l=read(),r=read(),k=read();
printf("%lld\n",solve(r)-solve(l-));return ;
}
[51Nod1623] 完美消除的更多相关文章
- bzoj 1006: [HNOI2008]神奇的国度 弦图的染色问题&&弦图的完美消除序列
1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1788 Solved: 775[Submit][Stat ...
- 无向图的完美消除序列 判断弦图 ZOJ 1015 Fish net
ZOJ1015 题意简述:给定一个无向图,判断是否存在一个长度大于3的环路,且其上没有弦(连接环上不同两点的边且不在环上). 命题等价于该图是否存在完美消除序列. 所谓完美消除序列:在 vi,v ...
- BZOJ 1006 完美消除序列&最大势算法&弦图
K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在.所谓N边关系 ...
- 51NOD 1623 完美消除 数位DP
题目描述: 定义数的消除操作为选定[L,R,x],如果数的第L到第R位上的数字都大于等于x,并且这些数都相等,那么该操作是合法的(从低位到高位编号,个位是第一位,百位是第二位……),然后将这些位数上的 ...
- [51nod Round 15 B ] 完美消除
数位DP. 比较蛋疼的是,设a[i]表示第i位上数字,比方说a[1]<a[2]>a[3],且a[1]==a[3]时,这两位上的数可以放在一起搞掉. 所以就在正常的f数组里多开一维,表示后面 ...
- 51nod 1623 完美消除(数位DP)
首先考虑一下给一个数如何求它需要多少次操作. 显然用一个单调栈就可以完成:塞入栈中,将比它大的所有数都弹出,如果栈中没有当前数,答案+1. 因为数的范围只有0~9,所以我们可以用一个二进制数来模拟这个 ...
- bzoj 1006 [HNOI2008]神奇的国度 弦图+完美消除序列+最大势算法
[HNOI2008]神奇的国度 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 4370 Solved: 2041[Submit][Status][D ...
- 【BZOJ】1006: [HNOI2008]神奇的国度 弦图消除完美序列问题
1006: [HNOI2008]神奇的国度 Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则. 他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的 ...
- BZOJ 1006 【HNOI2008】 神奇的国度
题目链接:神奇的国度 一篇论文题--神奇的弦图,神奇的MCS-- 感觉我没有什么需要多说的,这里简单介绍一下MCS: 我们给每个点记录一个权值,从后往前依次确定完美消除序列中的点,每次选择权值最大的一 ...
随机推荐
- vs中free内存失败
关于vs中free内存失败: 主要有以下两个原因: 1. 函数参数调用写错.特别是传指针进去的时候,若形参与实参不对应,会出错. 2. 内存分配不够,这个原因主要是因为程序中访问到了内存外的地址,即使 ...
- mysql NULL函数 语法
mysql NULL函数 语法 作用:如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录.这意味着该字段将以 NULL 值保存. 说明:NULL 值的处理方式与其 ...
- create-react-app 构建的项目使用释放配置文件 webpack 等等 运行 npm run eject 报错
使用 git 提交一次记录即可正常 git add . git commit -m 'init' npm run eject
- (79)【按键】[独立按键] - 1: 单击,双击,三击以及N击
此按键程序的实现的功能是单个独立按键的[单击],[长按],[双击],[三击]以及[多击].本文分为三个部分, 第一个部分是说[单击],[长按]的程序: 第二部分是讲[双击]: 第三部分是讲[三击],[ ...
- 在MyEclipse安装Spket插件,用于jQuery代码提示
Spket插件下载: https://pan.baidu.com/s/1sjz24NF 解压文件,然后将解压后的文件全部复制到MyEclipse安装目录下的dropins包中,重启MyEclipse. ...
- PTA编程总结一
7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成“贰万叁仟壹百零捌”元.为了简化输出,用小写英文字 ...
- C# 使用 MsieJavaScriptEngine 引擎运行JavaScript
用这个东西实现了一个js脚本引擎代码生成器,调研的时候这个东西的资料比较少. 我就根据自己的这点应用来讲解讲解,有错误,不符的地方还请园友指出. 使用 Nuget 安装 MsieJavaScriptE ...
- [论文笔记] Fine-Grained Head Pose Estimation Without Keypoints
Fine-Grained Head Pose Estimation Without Keypoints 简介 head pose estimation 经典论文,使用CNN预测三个角度值,pitch, ...
- Python学习之==>常用模块
一.string模块 import string print(string.ascii_letters) # 所有大小写字母 print(string.ascii_lowercase) # 所有小写字 ...
- linux iptables相关
iptables -A INPUT -p udp --dport 90 -j ACCEPT iptables -A INPUT -p tcp -m state --state ESTABLISHED ...