HDU 5898 基础数位DP
来源:互联网 发布:python genetic 编辑:程序博客网 时间:2024/04/30 20:52
http://acm.hdu.edu.cn/showproblem.php?pid=5898
题意:统计 连续的奇数必须是偶数个,连续的偶数必须是奇数个。。的个数
思路:dp[ i ] [ j ] [ k ] 前i位 上一位是j 连续的奇数或者偶数有k。。
blog里面数位dp比较少,贴一个上来。。。
代码:
#include <stdio.h>#include <time.h>#include <stdlib.h>#include <iostream>#include <cstring>using namespace std;typedef long long ll;int a[20];ll dp[20][11][20];//不同题目状态不同ll dfs(int pos,int state,int ok,bool lead/*前导零*/,bool limit/*数位上界变量*/){ if(pos==-1&&(state+ok)%2==1) return 1; if(pos==-1&&(state+ok)%2==0) return 0; if(!limit && !lead && dp[pos][state][ok]!=-1) return dp[pos][state][ok]; int up=limit?a[pos]:9; ll ans=0; if(lead){ for(int i=0;i<=up;i++){ ans+=dfs(pos-1,i,1,lead && i==0,limit && i==a[pos]); } } else if((state+ok)%2==1){ for(int i=0;i<=up;i++){ if((i+state)%2==0) ans+=dfs(pos-1,i,ok+1,lead && i==0,limit && i==a[pos]); else ans+=dfs(pos-1,i,1,lead && i==0,limit && i==a[pos]); } } else{ for(int i=0;i<=up;i++){ if((i+state)%2==0) ans+=dfs(pos-1,i,ok+1,lead && i==0,limit && i==a[pos]); } } if(!limit && !lead) dp[pos][state][ok]=ans; return ans;}ll solve(ll x){ int pos=0; a[0]=0; while(x) { a[pos++]=x%10;//编号为[0,pos), x/=10; } return dfs(pos-1/*从最高位开始枚举*/,10,1,true,true);}int main(){ ll le,ri; int cas=1; int t; scanf("%d",&t); memset(dp,-1,sizeof(dp)); while(t--){ scanf("%lld%lld",&le,&ri); printf("Case #%d: %lld\n",cas++,solve(ri)-solve(le-1)); }}
0 0
- 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 3555 Bomb 基础数位dp
- hdu 3555数位dp基础入门题
- HDU 3555 Bomb(基础数位dp)
- HDU训练记录2:基础数位dp
- hdu 2089 不要62 基础数位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)
- SQL语言总结
- pojo的排序问题疑问
- 学习计划-16.09.21
- Convert Sorted Array to Binary Search Tree——Difficulty:Medium
- [整理]-iOS- 原生二维码的扫描实现
- HDU 5898 基础数位DP
- 数据库入门之增删改查
- CentOS 6.3(x86_64)下安装Oracle 10g R2
- 内存不足引起的SIGKILL:一个缓冲区不断增长问题的定位与解决(解释SIGKILL原因)
- Mysql Join语法解析与性能分析
- java工作摘记-本地项目测试流程
- React Native 生命周期
- java enum(枚举)理解
- python+selenium自动化测试学习笔记一