[数位dp] lightoj 1205 Palindromic Numbers
来源:互联网 发布:windows 7 字体在哪 编辑:程序博客网 时间:2024/06/10 00:23
题意:给定范围内是回文数的个数。
思路:
dp[site][len] site位的回文长度是len。
需要一个负责数组 ok存每位放的数。
然后就是dfs了,就是取len 的中间值mid
超过mid的话 就看看ok里面之前对称的那个数 判断是否相等
相等才能放进入下一位。
注意判断前导0,和这个oj必须用long long。
代码:
#include"cstdlib"#include"cstdio"#include"cstring"#include"cmath"#include"queue"#include"algorithm"#include"iostream"using namespace std;//2014年9月24日10:30:25long long dp[22][22];int num[22],ok[22];long long dfs(int site,int n,int zero,int f){ if(site==0) return 1; if(!f&&!zero&&dp[site][n]!=-1) return dp[site][n]; int len=f?num[site]:9; long long ans=0; for(int i=0; i<=len; i++) { if(zero) { if(i==0) ans+=dfs(site-1,n-1,zero&&i==0,f&&i==len); else { ok[site]=i; ans+=dfs(site-1,n,zero&&i==0,f&&i==len); } } else { int mid=(n+1)/2; if(n%2) { if(site==mid) ans+=dfs(site-1,n,zero&&i==0,f&&i==len); else if(site>mid) { ok[site]=i; ans+=dfs(site-1,n,zero&&i==0,f&&i==len); } else { if(ok[n+1-site]==i) ans+=dfs(site-1,n,zero&&i==0,f&&i==len); } } else { if(site>mid) { ok[site]=i; ans+=dfs(site-1,n,zero&&i==0,f&&i==len); } else { if(ok[n+1-site]==i) ans+=dfs(site-1,n,zero&&i==0,f&&i==len); } } } } if(!f&&!zero) dp[site][n]=ans; return ans;}long long solve(long long x){ int cnt=0; while(x) { num[++cnt]=x%10; x/=10; } return dfs(cnt,cnt,1,1);}int main(){ int t,cas=1; cin>>t; memset(dp,-1,sizeof(dp)); while(t--) { long long x,y; scanf("%lld%lld",&x,&y); if(x>y) swap(x,y); printf("Case %d: %lld\n",cas++,solve(y)-solve(x-1)); } return 0;}//2014年9月24日11:26:45
0 0
- LightOJ 1205 - Palindromic Numbers (数位dp)
- LightOJ 1205 - Palindromic Numbers (数位dp)
- [数位dp] lightoj 1205 Palindromic Numbers
- LightOJ 1205 Palindromic Numbers(数位DP)
- lightOJ 1205(Palindromic Numbers数位DP)
- lightoj 1205 - Palindromic Numbers 数位DP
- LightOJ 1205 Palindromic Numbers(数位dp)
- lightoj - 1205 Palindromic Numbers (数位dp)好
- Light OJ 1205-Palindromic Numbers-数位DP
- Light OJ 1205 Palindromic Numbers (数位DP)
- lightOJ1205 Palindromic Numbers(数位dp)
- Palindromic Numbers (数位dp)
- Palindromic Numbers(数位dp)
- LightOJ 1205 Palindromic Numbers
- LightOJ 1205 Palindromic Numbers
- LightOJ 1205 Palindromic Numbers
- Light oj 1205 - Palindromic Numbers(数位dp)
- lightoj 1205 数位DP
- Android App调用SDK 登录第一次总是失败的解决方法
- 总结最近学习的C++知识
- union-find算法——解决连通性一类问题的算法
- JBoss的安装配置
- android属性动画--XML设置动画
- [数位dp] lightoj 1205 Palindromic Numbers
- 用户画像数据建模方法
- 【树状数组】 HDOJ 5032 Always Cook Mushroom
- Cocos2d-x 中与内存管理有关的宏
- Linux下gdb调试方法
- iOS block的用法------相当不错的一篇文章
- POJ 3006 Dirichlet's Theorem on Arithmetic Progressions(简单题)
- 安卓第一课:通过一个简单的MP3播放器来认识安卓开发【上】
- Div 拖拽