HDU 5898 数位DP
来源:互联网 发布:天正建筑t20 mac 编辑:程序博客网 时间:2024/05/21 10:28
odd-even number
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Problem Description
For a number,if the length of continuous odd digits is even and the length of continuous even digits is odd,we call it odd-even number.Now we want to know the amount of odd-even number between L,R(1<=L<=R<= 9*10^18).
Input
First line a t,then t cases.every line contains two integers L and R.
Output
Print the output for each case on one line in the format as shown below.
Sample Input
2 1 100 110 220
Sample Output
Case #1: 29Case #2: 36
题意:区间[l,r]有多少连续的奇数长度为偶数,连续的偶数长度为奇数的数。
题解:数位dp。
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; typedef long long ll; ll dp[20][20][20]; ll digit[20]; ll dfs(ll sum,ll len,ll sum1,ll sum2,bool fp){ if(!len){ if(sum1==0&&sum2%2==1)return 1;//如果以偶数结束,判断连续偶数个数是不是奇数 if(sum2==0&&sum1%2==0)return 1;//如果以奇数结束,判断连续奇数个数是不是偶数 return 0; } if(!fp&&dp[len][sum1][sum2]!=-1)return dp[len][sum1][sum2]; ll ret=0,i,fpmax=fp?digit[len]:9; for(i=0;i<=fpmax;i++){ ll sums=sum*10+i; ll now1,now2; if(i%2){ if(sum2%2==0&&sum2!=0)continue;//如果这位是奇数,上位是偶数,如果连续偶数的个数是偶数就gg now1=sum1+1; now2=0; } else{ if(sum1%2)continue;//这位是偶数,上位是奇数,如果连续奇数的个数是奇数就gg if(sums)now2=sum2+1;//判0 else now2=0; now1=0; } ret+=dfs(sums,len-1,now1,now2,fp&&i==fpmax); } if(!fp)dp[len][sum1][sum2]=ret; return ret; } ll solve(ll n){ ll len=0; while(n){ digit[++len]=n%10; n/=10; } ll ret=0,i; ret=dfs(0,len,0,0,true); return ret;} int main(){ memset(dp,-1,sizeof(dp)); ll t,x,y,cas=1; scanf("%lld",&t); while(t--){ scanf("%lld%lld",&x,&y); printf("Case #%lld: %lld\n",cas++,solve(y)-solve(x-1)); } return 0; }
0 0
- HDU 5898 数位DP
- HDU 5898 数位dp
- HDU 5898 数位DP
- HDU 5898 数位DP
- HDU 5898 数位DP
- HDU 5898 基础数位DP
- hdu 5898 (数位dp)
- [hdu 5898 odd-even number] 数位DP
- Hdu-5898 odd-even number(数位DP)
- HDU 5898 odd-even number(数位dp)
- hdu 5898 odd-even number (数位dp)
- hdu 5898 数位dp,记忆化搜索
- hdu 3555 数位dp
- hdu 3555 数位dp
- HDU 3652 数位DP
- HDU 3555 数位DP
- HDU 3555 \数位DP
- HDU 2089 数位DP
- unity 用点乘和叉乘来判断 物体与人物的相对位置
- Hammer.js——移动设备触摸手势
- 异步消息的传递-回调机制
- 第三周 项目2 建设“顺序表”算法库
- 无符号整形的加减乘除运算
- HDU 5898 数位DP
- iOS开发 如何适配iOS10
- oracle11g 数据库导出报“ EXP-00003: 未找到段 (0,0) 的存储定义”错误的解决方案
- 猫都能学会的Unity3D Shader入门指南(二)
- JSP的3个编译指令、7个动作指令和9个内置对象
- DNS记录 如果把DNS的体系结构比喻成一棵倒挂的大树,那么毫无疑问,每一条记录就是组成这棵大树必不可少的枝叶了。所谓的DNS记录,其实就是具有特殊功能的一个个数据条目。在windo
- 文件的读取
- 关于百宝云自动备份功能
- C++模板源代码的三种组织方式