bzoj 4521 [Cqoi2016]手机号码
来源:互联网 发布:黑客帝国3矩阵革命免费 编辑:程序博客网 时间:2024/05/20 18:01
数位DP。
设f[pos][p2][p1][con][bj8][bj4]表示第pos位,前两个数为p2,p1,con表示是否已经有三个连续出现的数字,bj8表示8是否已经出现,bj4同理。在这种情况下的方案数。
用记忆化搜索比较方便。
代码:
#include<iostream>#include<cstdio>using namespace std;typedef long long LL;LL a[20],f[20][15][15][2][2][2],vst[20][15][15][2][2][2];LL DFS(LL pos,LL op,LL p2,LL p1,LL con,LL bj8,LL bj4){ if(bj8&&bj4)return 0; if(pos==0)return con; if(!op&&vst[pos][p2][p1][con][bj8][bj4])return f[pos][p2][p1][con][bj8][bj4]; LL i,lim=op?a[pos]:9,ret=0; for(i=(pos==a[0]);i<=lim;i++)ret+=DFS(pos-1,op&&(i==lim),p1,i,con||(p2==p1&&p1==i),bj8||(i==8),bj4||(i==4)); if(!op) {vst[pos][p2][p1][con][bj8][bj4]=1; f[pos][p2][p1][con][bj8][bj4]=ret; } return ret;}LL Cal(LL x){ a[0]=0; while(x){a[++a[0]]=x%10;x/=10;} return DFS(a[0],1,0,0,0,0,0);}int main(){ LL L,R; cin>>L>>R; if(L==10000000000LL)cout<<Cal(R); else cout<<Cal(R)-Cal(L-1); return 0;}
0 0
- bzoj 4521 [Cqoi2016]手机号码
- bzoj 4521: [Cqoi2016]手机号码
- BZOJ 4521: [Cqoi2016]手机号码
- bzoj 4521 [Cqoi2016]手机号码
- bzoj 4521: [Cqoi2016]手机号码
- BZOJ 4521 [Cqoi2016] 手机号码
- BZOJ 4521 [Cqoi2016]手机号码
- BZOJ 4521 [CQOI2016]手机号码
- bzoj 4521: [Cqoi2016]手机号码
- [数位DP] BZOJ 4521 [Cqoi2016]手机号码
- bzoj 4521: [Cqoi2016]手机号码 数位dp
- bzoj 4521: [Cqoi2016]手机号码 (数位dp)
- 【bzoj 4521】 [Cqoi2016]手机号码(数位dp)
- BZOJ 4521: [Cqoi2016]手机号码 数位dp
- 4521: [Cqoi2016]手机号码
- 4521: [Cqoi2016]手机号码
- 4521: [Cqoi2016]手机号码
- 4521: [Cqoi2016]手机号码|数位DP
- 欢迎使用CSDN-markdown编辑器
- Struts2 入门学习笔记(二)——拦截器应用
- 关于python中字典的一些总结
- 关于继承,类,抽象类,接口的实际操作
- 杭电5660 jrMz and angles
- bzoj 4521 [Cqoi2016]手机号码
- 剑指offer系列之44:扑克牌顺子
- 数据库优化--NoSQL的分类和说明
- hashmap实现原理浅析
- JSON知识总结
- PHP——函数二_学习笔记
- 面试题78:随机抽奖
- Cocos2dx 报错:Error: Program "make" is not found in PATH
- PHP语法基础