HDU 5898 odd-even number (2016亚洲区沈阳站网络赛 )
来源:互联网 发布:淘宝网水晶家纺被子 编辑:程序博客网 时间:2024/05/16 10:06
第三次载在数位dp上。。。。
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5898
#include <cstdio>#include <cstring>#include <cmath>#include <ctime>#include <cstdlib>#include <queue>#include <stack>#include <string>#include <map>#include <vector>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int N=1e6+2;int s,n,m,k,p,q,t,r,y,x,u,v;int a[N],b[N];long long dp[25][25][2][2];//u记录第几位,l记录目前的段的长度,v记录之前一个位是奇偶,o判断前导零long long dfs(int u, int v, int l, int o, bool f){ if(u <= 0) return (v & 1) != (l & 1); if(f && dp[u][l][v][o] != -1) return dp[u][l][v][o]; int d = f ? 9 : a[u]; long long ans = 0; for(int i = 0; i <= d; i++) { if(o == 0) //如果前面都是0,记得特殊考虑这种情况 { if(i == 0) ans += dfs(u - 1, 0, 0, 0, f || i < d); else ans += dfs(u - 1, i & 1, 1, 1, f || i < d); } else { if(i & 1) { if(v & 1) ans += dfs(u - 1, i & 1, l + 1, 1, f || i < d); else { if(l & 1) ans += dfs(u - 1, i & 1, 1, 1, f || i < d); } } else { if(v & 1) { if(!(l & 1)) ans += dfs(u - 1, i & 1, 1, 1, f || i < d); } else { ans += dfs(u - 1, i & 1, l + 1, 1, f || i < d); } } } } if(f) dp[u][l][v][o] = ans; return ans;}long long solve(long long x){ int l = 0; while(x) { a[++l] = x % 10; x /= 10; } return dfs(l, 0, 0, 0, 0);}int main(){ int t; scanf("%d", &t); for(int i = 1; i <= t; i++) { memset(dp, -1, sizeof(dp)); long long l, r; scanf("%I64d%I64d", &l, &r); printf("Case #%d: %I64d\n", i, solve(r) - solve(l - 1)); } return 0;}
0 0
- HDU 5898 odd-even number (2016亚洲区沈阳站网络赛 )
- HDU 5898 odd-even number 沈阳网络赛
- hdu 5898 odd-even number 2016ACM/ICPC沈阳赛区网络赛1007
- HDU 5898 odd-even number 2016年沈阳网络赛 (数位dp)
- hdu 5898 - odd-even number (2016沈阳网络赛) - 数位dp
- hdu 5898odd-even number (数位dp 沈阳网络赛)
- hdu 5898 odd even number(acm/icpc沈阳赛区网络赛,数位DP)
- 【2016-沈阳赛区网络赛-G】记忆化搜索,数位DP(odd-even number,hdu 5898)
- hdu5898 odd-even number 沈阳网络赛1007
- hdu 5898 odd-even number
- HDU 5898 - odd-even number
- 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 odd-even number(基础数位DP)
- HDU 5898 odd-even number (数位DP)
- [hdu 5898 odd-even number] 数位DP
- [hdu 5898 odd-even number] 数位DP
- Android使用Application总结
- Codeforces 500B New Year Permutation(更换位置,找最小字典数)
- leetcode 15 3Sum
- Arch linux (虚拟机)安装教程
- HDU 5898 odd-even number (2016亚洲区沈阳站网络赛 )
- Permutations I , II
- Asp图片大小处理及AspJpeg失效设置
- 通过反射获取泛型类的类型
- 【java】面向对象——封装性、继承性和多态性
- Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析
- 8CollapsingToolbarLayout源码分析
- poj 1789
- Java IO字符流读取文件总结