1026: [SCOI2009]windy数 (按位DP)
定义windy数:相邻数字的差至少是2的数,例如10不是windy数,而13是windy数。求给定区间中有多少windy数。区间端点范围为 [1, 2000000000]
#include <stdio.h> #include <string.h> #define N 10 int dp[N][N],digit[N]; int dfs(int pos,int last,int z,int f) {if(pos==-1) return 1;if(z&&!f&&dp[pos][last]!=-1) return dp[pos][last];int max=f?digit[pos]:9;int ret=0;if(z==0){for(int i=0;i<=max;i++){ret+=dfs(pos-1,i,i,f&&i==max);}}else{for(int i=0;i<=max;i++){if((i-last)*(i-last)<4) continue;ret+=dfs(pos-1,i,1,f&&i==max);}}if(z&&!f) dp[pos][last]=ret;return ret; } int cal(int x) {int pos=0;while(x){digit[pos++]=x%10;x/=10;}return dfs(pos-1,0,0,1); } int main() {memset(dp,-1,sizeof(dp));int a,b;while(~scanf("%d%d",&a,&b)) printf("%d\n",cal(b)-cal(a-1));return 0; }
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; #define LEN 15 char a[LEN],b[LEN]; int n,m; int dp[LEN][10][2][2][2]; //第二维记录最后的数字,第三维记录状态是否合法,第四维记录该位是否是最高位,最后一维记录是否达到上界 int nextstate(int cur,int last,int in) {if(cur==0 && abs(last-in)>=2) return 0;return 1; } int nextflag1(int cur,int in,int max) {if(cur==1 && in==max) return 1;if(cur==1 && in>max) return -1;return 0; } int nextflag2(int cur,int in) {if(cur==1 && in==0) return 1;return 0; } int DP(char *s,int len) {memset(dp,0,sizeof(dp));dp[0][0][0][1][1]=1;for(int i=1;i<=len;i++)for(int last=9;last>=0;last--)for(int state=0;state<2;state++)for(int flag1=0;flag1<2;flag1++)for(int flag2=0;flag2<2;flag2++)for(int in=0;in<10;in++){int nxt=nextstate(state,last,in);if(flag2==1) nxt=0;if(nextflag1(flag1,in,s[i]-'0')!=-1)dp[i][in][nxt][nextflag1(flag1,in,s[i]-'0')][nextflag2(flag2,in)]+=dp[i-1][last][state][flag1][flag2];}int ret=0;for(int i=0;i<10;i++) ret+=dp[len][i][0][0][0]+dp[len][i][0][1][0];return ret; } int main() {while(~scanf("%d%d",&n,&m)){n--;sprintf(a+1,"%d",n);sprintf(b+1,"%d",m);printf("%d\n",DP(b,strlen(b+1))-DP(a,strlen(a+1)));}return 0; }
转载于:https://www.cnblogs.com/algorithms/archive/2012/08/02/2620431.html
1026: [SCOI2009]windy数 (按位DP)相关推荐
- bzoj 1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 7688 Solved: 3470 [Submit][S ...
- bzoj:1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 7982 Solved: 3593 Descriptio ...
- BZOJ 1026 [SCOI2009]windy数
1026: [SCOI2009]windy数 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间 ...
- bzoj 1026 //1026: [SCOI2009]windy数
bzoj 1026 //1026: [SCOI2009]windy数 //在线测评地址https://www.lydsy.com/JudgeOnline/problem.php?id=1026 / ...
- P2657 [SCOI2009] windy 数(数位DP)
题目链接:[SCOI2009] windy 数 - 洛谷 这是一道需要考虑前导0的数位DP题,为什么需要考虑前导0呢?其实原因很简单,因为有条件限制我们相邻两个数的差,所以我们在进行数位DP时必须把前 ...
- bzoj 1026: [SCOI2009]windy数 数位DP算法笔记
数位DP入门题之一 也是我所做的第一道数位DP题目 (其实很久以前就遇到过 感觉实现太难没写) 数位DP题目貌似多半是问从L到R内有多少个数满足某些限制条件 只要出题人不刻意去卡多一个$log$什么的 ...
- bzoj 1026: [SCOI2009]windy数
Time Limit: 1 Sec Memory Limit: 162 MB Submit: 9998 Solved: 4629 [Submit][Status][Discuss] Descripti ...
- BZOJ1026 || 洛谷P2657 [SCOI2009]windy数【数位DP】
Time Limit: 1 Sec Memory Limit: 162 MB Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. ...
- 洛谷 P2657 [SCOI2009] windy数 数位DP
大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 P2657 [SCOI2009 ...
最新文章
- Ubuntu 12.04下玩转终端管理器Byobu
- 什么是ATL? (与COM的关系,及MFC与COM的关系)
- studio项目上传svn服务器,SVN在AndroidStudio中的使用(一),SVN安装配置和项目检出更新...
- 在Linux上安装Memcached服务(自己测试过了)
- 分享实录 | 单人开发场景下的测试环境实践
- mysql不用left join_MySQL在右表数据不唯一的情况下使用left join的方法_MySQL - join
- Java 开发环境部署
- 550什么意思_布草知识 | 都是羽绒,为什么价格大不同?
- 数据结构与算法python—9.二叉树及python实现
- Oculus:自己做内容不是长远之计,资助第三方开发者才是王道
- 从“规模叙事”迈向“利润叙事”,中国制造背后的“天狼”动力
- python乘法口诀表打印
- Inkscape制作logo
- 【大猛子与曾经的无趣生活】
- samtools从fastq到bam再到bigwig(bw)
- 知网caj文件转pdf(无需下载任何软件,傻瓜式操作,必看!!!)
- 阿里云推出网盘App,开放申请!非会员下载 10MB/s! 还有更厉害的:60M/s
- Web全栈开发基础(小白入门版本)
- 解决s3.amazonaws.com打不开、下载速度慢等问题
- JAVA大数据的第五十九天——The authenticity of host ‘gree129 (192.168.**.129)‘ can‘t be established.
热门文章
- 流水线、超流水线、超标量技术对比
- C++ const成员和引用成员
- php的异常详解,php5异常处理详解_php
- linux下使用VS CODE + CMAKE 调试C++程序
- 计算机维修工中级实践考试,计算机维修工(中级)技能考核.doc
- php网站404页面302,404页面该怎么做?
- c++内存管理-内存顺序
- Tomcat中部署后JspFactory报异常的解决方案
- 交换机与路由器主要功能的区别和联系
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)