HDU 5898 odd-even number(2016沈阳网络选拔赛 数位DP)
定义DP[pos][pre][odd][even],pos代表当前数位,pre代表前一位的数值,odd代表到前一位连续的奇数个数,even代表到前一位连续偶数个数。
odd和even肯定至少有一个为0,而且最后的判断只和odd与even的奇偶性有关,能看出这个状态是可以被缩小到很小的,但是DP菜鸟我为了避免出错,还是定义了8万的可以接受的数组。
代码及注释如下:
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- using namespace std;
- #define LL long long
- LL dp[][][][];
- int bit[];
- LL dfs(int pos,int pre,bool limit,bool lead0,int odd,int even)
- {
- if(pos == -)
- {
- if(odd== && even%==) return ;
- if(even== && odd%==) return ;
- return ;
- }
- if(!limit && !lead0 && dp[pos][pre][odd][even]!=-)///为了
- ///保证没有任何的歧义,前两个判定条件是必要的
- {
- return dp[pos][pre][odd][even];
- }
- int up = limit? bit[pos]: ;
- LL ans = ;
- for(int i = ; i <= up; i++)
- {
- bool Nlimit = (limit && i==up);
- bool Nlead0 = (lead0 && i==);
- if(lead0)///前导0存在的时候,建议特殊判断
- {
- if(i==) ans += dfs(pos-,i,Nlimit,Nlead0,,);
- else if(i%==) ans += dfs(pos-,i,Nlimit,Nlead0,,);
- else ans += dfs(pos-,i,Nlimit,Nlead0,,);
- }
- else
- {
- if( (odd%==&&i%==) || (even!=&&even%==&&i%==) ) continue;
- ///这两种状态是不符合要求的状态,第二个判断需要注意even = 0的情况
- if(i%==) ans += dfs(pos-,i,Nlimit,Nlead0,,even+);
- else ans += dfs(pos-,i,Nlimit,Nlead0,odd+,);
- }
- }
- if(!limit && !lead0) dp[pos][pre][odd][even] = ans;
- return ans;
- }
- LL solve(LL x)
- {
- int pos = ;
- while(x)
- {
- bit[pos++] = x%;
- x /= ;
- }
- return dfs(pos-,-,true,true,,);
- }
- int main()
- {
- // freopen("1.in.cpp","r",stdin);
- int t,ca=;
- LL l,r;
- cin>>t;
- memset(dp,-,sizeof(dp));
- while(t--)
- {
- cin>>l>>r;
- printf("Case #%d: ",++ca);
- cout<<solve(r)-solve(l-)<<endl;
- }
- return ;
- }
HDU 5898 odd-even number(2016沈阳网络选拔赛 数位DP)的更多相关文章
- 2016沈阳网络赛 odd-even number
odd-even number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- HDU 5880 Family View (2016 青岛网络赛 C题,AC自动机)
题目链接 2016 青岛网络赛 Problem C 题意 给出一些敏感词,和一篇文章.现在要屏蔽这篇文章中所有出现过的敏感词,屏蔽掉的用$'*'$表示. 建立$AC$自动机,查询的时候沿着$fa ...
- 2016 ccpc 网络选拔赛 F. Robots
Robots Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- HDU 5898:odd-even number(数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=5898 题意:给出一个区间[l, r],问其中数位中连续的奇数长度为偶数并且连续的偶数长度为奇数的个数.(1< ...
- HDU 6201 2017沈阳网络赛 树形DP或者SPFA最长路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6201 题意:给出一棵树,每个点有一个权值,代表商品的售价,树上每一条边上也有一个权值,代表从这条边经过 ...
- HDU 6197 array array array 2017沈阳网络赛 LIS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6197 题意:给你n个数,问让你从中删掉k个数后(k<=n),是否能使剩下的序列为非递减或者非递增 ...
- HDU 6194 string string string 2017沈阳网络赛 后缀数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6194 题意:告诉你一个字符串和k , 求这个字符串中有多少不同的子串恰好出现了k 次. 解法:后缀数组 ...
- HDU 5886 Tower Defence(2016青岛网络赛 I题,树的直径 + DP)
题目链接 2016 Qingdao Online Problem I 题意 在一棵给定的树上删掉一条边,求剩下两棵树的树的直径中较长那的那个长度的期望,答案乘上$n-1$后输出. 先把原来那棵树的 ...
- 2016沈阳网络赛 QSC and Master
QSC and Master Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
随机推荐
- chrome devtools
Elements chrome devtools 中 Elements panel 是审查 dom 元素和 css 的, 可以实时修改 dom/css. windows: ctrl + shift + ...
- 一箭N雕:多任务深度学习实战
1.多任务学习导引 多任务学习是机器学习中的一个分支,按1997年综述论文Multi-task Learning一文的定义:Multitask Learning (MTL) is an inducti ...
- mvc log4net将日志写入数据库失败解决之道——开启内部调试
项目信息:spring mvc5 EF6 数据库:sql2008r2 log4net版本:1.2.10.0 第一天: 1.思路一:配了半天,一直无法写入数据库,网上搜了一大堆的资料,都没能解决,怀疑 ...
- Webdriver其他定位方式
1.下拉框的定位 在遇到select下拉框的选择时,比如: <select id="nr" name="NR"> <option select ...
- MVC教程
http://developer.51cto.com/art/201309/409950_all.htm
- hibernate增删改查
-----------增加--------- public void insertUsers(String userName,String userPwd) { Users u=new Users() ...
- 1.1 Eclipse下载安装
可直接上官网下载:http://www.eclipse.org/downloads/ 直接下载地址:http://www.eclipse.org/downloads/download.php?file ...
- gerrit的merge conflict
找了很多资料,最后参考http://blog.csdn.net/w_jewelry/article/details/8123639 解决的. 先把gerrit的那几个commit abandon掉. ...
- 转:详解JMeter正则表达式(1)
1.概览 JMeter中包含范本匹配软件Apache Jakarta ORO .在Jakarta网站上有一些关于它的文档,例如a summary of the pattern matching cha ...
- Java jvm 原理
1.Java语言运行的过程 Java语言写的源程序通过Java编译器,编译成与平台无关的‘字节码程序’(.class文件,也就是0,1二进制程序),然后在OS之上的Java解释器中解释执行. 也相当与 ...