hdu 5898 odd-even number(数位dp)
Problem Description
题意:一个数中所有连续的奇数长度都为偶数,所有连续偶数的长度都为奇数。我们要找一个区间内一共有多少个这样的数。
区间范围(1~9*10^18)所以显然是数位dp搞。设dp[len][count][temp],temp=1表示偶数,temp=2表示奇数,temp=0表示取首位0时,
count表示到len位置有几个奇数或偶数个。显然简单的搜索,标准数位dp
- #include <iostream>
- #include <cstring>
- using namespace std;
- typedef long long ll;
- ll dp[22][22][3];
- int dig[20];
- ll dfs(int len , int count , int temp , int flag , int first) {
- if(len == 0) {
- if(temp == 1) {
- if(count % 2 != 0) {
- return 1;
- }
- else {
- return 0;
- }
- }
- if(temp == 2) {
- if(count % 2 == 0) {
- return 1;
- }
- else {
- return 0;
- }
- }
- return 0;
- }
- if(!flag && !first && dp[len][count][temp] != -1) {
- return dp[len][count][temp];
- }
- int n = flag ? dig[len] : 9;
- ll sum = 0;
- for(int i = 0 ; i <= n ; i++) {
- if(first) {
- if(i == 0) {
- sum += dfs(len - 1 , 0 , 0 , flag && i == n , first && i == 0);
- }
- else {
- if(i % 2 == 0) {
- sum += dfs(len - 1 , count + 1 , 1 , flag && i == n , first && i == 0);
- }
- else {
- sum += dfs(len - 1 , count + 1 , 2 , flag && i == n , first && i == 0);
- }
- }
- }
- else {
- if(i % 2 == 0) {
- if(temp == 1) {
- sum += dfs(len - 1 , count + 1 , 1 , flag && i == n , first && i == 0);
- }
- if(temp == 2) {
- if(count % 2 == 0) {
- sum += dfs(len - 1 , 1 , 1 , flag && i == n , first && i == 0);
- }
- }
- }
- else {
- if(temp == 1) {
- if(count % 2 != 0) {
- sum += dfs(len - 1 , 1 , 2 , flag && i == n , first && i == 0);
- }
- }
- if(temp == 2) {
- sum += dfs(len - 1 , count + 1 , 2 , flag && i == n , first && i == 0);
- }
- }
- }
- }
- if(!flag && !first) {
- dp[len][count][temp] = sum;
- }
- return sum;
- }
- ll Get(ll x) {
- int len = 0;
- memset(dp , -1 , sizeof(dp));
- memset(dig , 0 , sizeof(dig));
- if(x == 0)
- len = 1;
- while(x) {
- dig[++len] = x % 10;
- x /= 10;
- }
- return dfs(len , 0 , 0 , 1 , 1);
- }
- int main()
- {
- int t;
- cin >> t;
- int ans = 0;
- while(t--) {
- ans++;
- ll l , r , gg;
- cin >> l >> r;
- cout << "Case #" << ans << ": " << Get(r) - Get(l - 1) << endl;
- }
- return 0;
- }
hdu 5898 odd-even number(数位dp)的更多相关文章
- 多校5 HDU5787 K-wolf Number 数位DP
// 多校5 HDU5787 K-wolf Number 数位DP // dp[pos][a][b][c][d][f] 当前在pos,前四个数分别是a b c d // f 用作标记,当现在枚举的数小 ...
- hdu 5898 odd-even number 数位DP
传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...
- HDU 5898 odd-even number (数位DP) -2016 ICPC沈阳赛区网络赛
题目链接 题意:一个数字,它每个数位上的奇数都形成偶数长度的段,偶数位都形成奇数长度的段他就是好的.问[L , R]的好数个数. 题解:裸的数位dp, 从高到低考虑每个数位, 状态里存下到当前位为止的 ...
- HDU 5787 K-wolf Number 数位DP
K-wolf Number Problem Description Alice thinks an integer x is a K-wolf number, if every K adjacen ...
- HDU 3709 Balanced Number (数位DP)
Balanced Number Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- HDU 5179 beautiful number 数位dp
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5179 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
- 2017"百度之星"程序设计大赛 - 复赛1005&&HDU 6148 Valley Numer【数位dp】
Valley Numer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- hdu 4352 XHXJ's LIS 数位dp+状态压缩
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4352 XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others ...
- codeforces Hill Number 数位dp
http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits: 5000 MS Memory Limits: ...
随机推荐
- 【iOS】iOS 调试快速定位程序在哪崩溃
iOS 开发过程中经常遇到程序崩溃.快速定位程序在哪崩溃的步骤如下: 1. 2. 3. 这样设置后,程序崩溃时会定位到崩溃的语句,如下: 原文链接:iOS开发何如在调试的时候轻松找到程序在哪里崩溃
- 多线程编程(Linux C)
多线程编程可以说每个程序员的基本功,同时也是开发中的难点之一,本文以Linux C为例,讲述了线程的创建及常用的几种线程同步的方式,最后对多线程编程进行了总结与思考并给出代码示例. 一.创建线程 多线 ...
- codeforces 347A - Difference Row
给你一个序列,让你求(x1 - x2) + (x2 - x3) + ... + (xn - 1 - xn).值最大的一个序列,我们化简一下公式就会发现(x1 - x2) + (x2 - x3) + . ...
- 开发一个Spring Boot Starter!
在上一篇文章中,我们已经了解了一个starter实现自动配置的基本流程,在这一小结我们将复现上一过程,实现一个自定义的starter. 先来分析starter的需求: 在项目中添加自定义的starte ...
- MyBatis 核心配置综述之 ParameterHandler
目录 ParameterHandler 简介 ParameterHandler 创建 ParameterHandler 中的参数从何而来 ParameterHandler 解析 MyBatis 四大核 ...
- 【Java例题】2.7找零钱
7.为顾客找零钱时,希望选用的纸币张数最少. 例如73元,希望零钱的面值为五十元1张,二十元1张,一元3张. 设零钱面值有五十元.二十元.十元.五元和一元, 请编写程序,用户输入100以下的数, 计算 ...
- Python 四大主流 Web 编程框架
Python 四大主流 Web 编程框架 目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实.但这些框架在系统架构和运行环境中有很多共通之处,本文带领读者学习基于Python网络框架 ...
- 集成方法 Ensemble
一.bagging 用于基础模型复杂.容易过拟合的情况,用来减小 variance(比如决策树).基础模型之间没有太多联系(相对于boosting),训练可以并行.但用 bagging 并不能有助于把 ...
- Markdown 基本语法(后面继续补充)
1.1 Markdown 基础语法 有序内容和无序内容 有序内容:输入1.然后按tab键 无序内容:输入' * ' 或 ' - ' 然后后按tab键 字体的样式 *** 内容 *** 加粗加斜(中间没 ...
- 如何永久破解IDEA 2019.2
声明: 支持知识产权,支持正版产权,以下仅限个人学习使用IDEA工具时随笔记录,禁止商业使用. 以下个人提供的激活补丁和激活码来源,均由网上下载,各位也可以自行查找. IDEA官网下载地址:https ...