博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cf 834 E. Ever-Hungry Krakozyabra
阅读量:6132 次
发布时间:2019-06-21

本文共 1861 字,大约阅读时间需要 6 分钟。

(爆搜+数位dp)

题意:

定义一种inedible tail为一个数把每一位数字按不降的顺序排列后,去掉前导0组成的序列

比如57040 组成的就是457 54组成就是45 45组成的也是45

问区间\([L,R]\)内有多少种inedible tail

题解: 直接数位dp做,需要存状态,太大处理不了。

这个问题等价于\(x0+x1+x2+...x9=18\)的非负整数解
组合数学 插空法 \(18+9个1,选9个插空,其余变1就是解,C(18+9,9) \approx 4*10^{6}\)

所以可以暴力枚举出所有方案,然后快速判断这种方案在\([L,R]\)内是否合法

用类似数位dp的思想,用上下界来枚举每一位能取的数字,到到达某一位时即不在上界也不在下界,说明后面的数字可以随便取,那么一定取得出这种方案

由于只有在上界或者下界的时候递归才会继续往下走,所以最多走18次,线性复杂度判断

#include
#define LL long long#define P pair
#define ls(i) seg[i].lc#define rs(i) seg[i].rc#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define ls rt<<1#define rs (rt<<1|1)using namespace std;int read(){ int x = 0; char c = getchar(); while(c < '0' || c > '9') c = getchar(); while(c >= '0' && c <= '9') x = x * 10 + c - 48, c = getchar(); return x;}int pos,ans;int a[20],b[20];int cnt[10];///数字为i的个数bool is(int pos,bool Lbound,bool Rbound){ if(pos == 0) return true; if(!Lbound && !Rbound) return true;///不是上下界,后面的数字可以任意取一定存在合法的情况 int l = Lbound?a[pos]:0; int r = Rbound?b[pos]:9; if(l > r) return false; for(int i = l;i <= r;i++){///枚举每一位能取的数字 if(cnt[i]){ cnt[i]--; if(is(pos - 1,Lbound && i == l, Rbound && i == r)){ cnt[i]++; return true; } cnt[i]++; } } return false;}void dfs(int cur,int total){ if(cur == 9){ cnt[cur] = total; ans += is(pos,1,1); return ; } for(int i = 0;i <= total;i++){ cnt[cur] = i; dfs(cur + 1, total - i); }}int digit(int *d,LL x){ int pos = 0; while(x){ d[++pos] = x % 10; x /= 10; } return pos;}int main(){ LL L,R; cin>>L>>R; pos = digit(a,L); pos = digit(b,R); ans = 0; dfs(0,pos);///暴力枚举所有的组合 cout<
<

转载于:https://www.cnblogs.com/jiachinzhao/p/7327252.html

你可能感兴趣的文章
HDOJ 2020 绝对值排序
查看>>
HDOJ/HDU 2560 Buildings(嗯~水题)
查看>>
Maven编译时跳过Test
查看>>
Spring Boot 整合Spring Security 和Swagger2 遇到的问题小结
查看>>
[20170628]12C ORA-54032.txt
查看>>
除以2
查看>>
高可用集群原理解析
查看>>
Nginx配置URL转向tomcat
查看>>
极客Web前端开发资源大荟萃#001
查看>>
让div固定在某个位置
查看>>
Java开发环境Docker镜像
查看>>
从无到有,WebService Apache Axis2初步实践
查看>>
任务调度(一)——jdk自带的Timer
查看>>
UIKit框架(15)PCH头文件
查看>>
整理看到的好的文档
查看>>
Linux磁盘管理和文件系统管理
查看>>
linux运维人员的成功面试总结案例分享
查看>>
Windows DHCP Server基于MAC地址过滤客户端请求实现IP地址的分配
查看>>
命令查询每个文件文件数
查看>>
《跟阿铭学Linux》第8章 文档的压缩与打包:课后习题与答案
查看>>