hdu 2089(数位DP)

不要62

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 32234    Accepted Submission(s): 11447

Problem Description

杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。
不吉利的数字为所有含有4或62的号码。例如:
62315 73418 88914
都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。
你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。

Input

输入的都是整数对n、m(0<n≤m<1000000),如果遇到都是0的整数对,则输入结束。

Output

对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。

Sample Input

1 100
0 0

Sample Output

80

Author

qianneng

Source

迎接新学期——超级Easy版热身赛

数位DP入门题。。详细题解参考:http://blog.csdn.net/wangyuquanliuli/article/details/13761661

#include <stdio.h>
#include <string.h>
using namespace std;
typedef long long LL;

int dp[10][10];
///预处理dp数组 ,dp[i][j]代表起始位为 j 的 i 位数有多少个.
void init(){
    memset(dp,0,sizeof(dp));
    dp[0][0] = 1;
    for(int i=1;i<=7;i++){ ///最多七位
        for(int j=0;j<=9;j++){ ///第 i 位出现的数字
            for(int k=0;k<=9;k++){ ///第 i - 1的数字
                if(j!=4&&!(j==6&&k==2)){
                    dp[i][j] += dp[i-1][k];
                }
            }
        }
    }
}
int solve(int n){ ///在[0,n)内有多少吉利数
    int dig[10];
    int ans=0;
    int len=1;
    while(n){
        dig[len++] = n%10;
        n/=10;
    }
    dig[len] = 0; ///这个一定要赋值,不然WA
    for(int i=len;i>0;i--){ ///枚举位
        for(int j=0;j<dig[i];j++){ ///枚举第i位的数字,第i位的数字小于dig[i]
            if(j!=4&&!(dig[i+1]==6&&j==2)){
                ans+=dp[i][j];
            }
        }
        if(dig[i]==4||(dig[i+1]==6&&dig[i]==2)) break;
    }
    return ans;
}
int main(){
    init();
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF,n+m){
        printf("%d\n",solve(m+1)-solve(n));
    }
}
时间: 2024-08-03 22:12:26

hdu 2089(数位DP)的相关文章

HDU 2089 数位dp入门

开始学习数位dp...一道昨天看过代码思想的题今天打了近两个小时..最后还是看了别人的代码找bug...(丢丢) 传说院赛要取消 ? ... 这么菜不出去丢人也好吧~ #include<stdio.h> #include<string.h> #include<algorithm> #include<map> #include<math.h> #include<queue> using namespace std; int n,m; /

HDU 2089 数位dp/字符串处理 两种方法

不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 34525    Accepted Submission(s): 12493 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可

hdu 4734 数位dp

http://acm.hdu.edu.cn/showproblem.php?pid=4734 Problem Description For a decimal number x with n digits (AnAn-1An-2 ... A2A1), we define its weight as F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1. Now you are given two numbers A and B, plea

hdu 4352 数位dp(最长上升子序列的长度为k的个数)

http://acm.hdu.edu.cn/showproblem.php?pid=4352 Problem Description #define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then carefully reading the entire description is very important. As the strongest fighting force in UESTC, xhxj grew

hdu 3709 数位dp(小思维)

http://acm.hdu.edu.cn/showproblem.php?pid=3709 Problem Description A balanced number is a non-negative integer that can be balanced if a pivot is placed at some digit. More specifically, imagine each digit as a box with weight indicated by the digit.

hdu 4352 数位dp + 状态压缩

XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2265    Accepted Submission(s): 927 Problem Description #define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then careful

hdu 4507 数位dp(求和,求平方和)

http://acm.hdu.edu.cn/showproblem.php?pid=4507 Problem Description 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 7+7=7*2 77=7*11 最终,他发现原来这一切归根到底都是因为和7有关!所以,他现在甚至讨厌一切和7有关的数! 什么样的数和7有关呢? 如果一个整数符合下面3个条件之一,那么我们就说

HDU 不要62 2089 数位DP

属于数位DP中的模版题 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> using namespace std; typedef long long LL; #define MOD 2520 int dp[20][2];//dp[数字的长度][数字的第一位数字]: int bit[20], p = 0; int df

2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6156 数位DP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6156 题意:如题. 解法:数位DP,暴力枚举进制之后,就转化成了求L,R区间的回文数的个数,这个直接做一个数位DP就好了.dp[jz][start][cur][state]表示jz进制下以start位起始到cur位状态为state(1表示已经回文,0表示没有回文)时回文数的个数. #include <bits/stdc++.h> using namespace std; typedef long