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) ...
随机推荐
- 高一的我曾对自己说"要放慢脚步去生活"!?
看了高一的时候自己写的日记,瞬间被自己感动到了.以下是当时的几段感慨: 慢是一种放松.是生活的一种良好心态,喜欢这样放慢步伐地生活,那是一种享受! 但我们生活在一个快节奏的时代,我们总是被迫卷进那潮流 ...
- sqlserver负载均衡
http://www.cnblogs.com/gaizai/p/3644510.html
- perl-Thread-Queue for openwrt
在centos7下运行 openwrt trunk的时候提示需要perl-thread-queue. yum install perl-thread-queue,提示没有这个文件.百度和google, ...
- 使用mybatis多表联查的时候结果异常及springmvc的理解
今天使用mybatis多表联查的时候,在dos窗口查询时可以出结果集,但是使用mybatis查询的时候最后返回的结果只有最后一个结果 然后研究了半天没弄出来,后来无意中发现添加了最外层从表的ID字段后 ...
- Spring MVC(二)
spring mvc工作流 1A)客户端发出http请求,只要请求形式符合web.xml 文件中配置的*.action的话,就由DispatcherServlet 来处理. 1B)Dispatcher ...
- 利用LinkedList实现洗牌功能
分2步: 1.生成扑克牌. 2.洗牌. package com.dongbin.collection; import java.util.LinkedList; import java.util.Ra ...
- linux 安装mysql数据库
Ubuntu上安装MySQL非常简单,只需要打开终端,几条命令就可以完成. 1. sudo apt-get install mysql-server 2. apt-get isntall mysql- ...
- ThinkPHP批量添加数据和getField()示例
批量添加数据 // 批量添加数据 $User = M('users'); $dataList[] = array('name'=>'thinkphp','email'=>'thinkphp ...
- C# 泛型 Func<object, string, bool> filter
Func<object, string, bool>是泛型,你可以先把他看成一个普通类型,比如stringpublic class Func{ } // 自定义个普通类. Func fil ...
- 微信小程序跳转页面
小程序页面有2种跳转,可以在wxml页面或者js中: 1,在wxml页面中: <navigator url="../index/index">跳转到新页面</na ...