1. 程式人生 > >HDU2089——不要62(數位dp入門)

HDU2089——不要62(數位dp入門)

不要62

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


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 和bomb的寫法基本是一樣的。

mark一下幾個需要注意的地方。一個是分類討論,低位該位高位影響都要考慮到。一個不要忘記算該數本身。細心細心細心!

#include <cmath>
#include <cstring>
#include <cstdio>
#include <vector>
#include <string>
#include <algorithm>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <ctime>
#include <cstdlib>
#include <cctype>
#include <iostream>
#include <fstream>
using namespace std;
#define MAXN 400010
#define LEN 200010
#define INF 1e9+7
#define MODE 1000000
#define pi acos(-1)
#define g 9.8
typedef long long ll;


long long dp[10][3];

/*
 * dp[i][0],表示不含有不吉利數字
 * dp[i][1],表示不含有不吉利數字,且最高位為2
 * dp[i][2],表示含有不吉利數字
 */

void init()
{
    dp[0][0]=1;
    dp[0][1]=0,dp[0][2]=0;
    for(int i=1;i<10;i++){
        dp[i][0]=9*dp[i-1][0]-dp[i-1][1];
        dp[i][1]=dp[i-1][0];
        dp[i][2]=dp[i-1][0]+dp[i-1][1]+10*dp[i-1][2];
    }
}

long long solve(int n){
    long long ans=0;
    int bit[10];
    int k=n;
    int num=1;
    while(n){
        bit[num++]=n%10;
        n/=10;
    }
    bit[num]=0;
    bool flag=false;
    for(int i=num-1;i>0;i--){
        ans+=dp[i-1][2]*bit[i];
        if(flag)
            ans+=dp[i-1][0]*bit[i];
        else{
            if(bit[i]>4){
                ans+=dp[i-1][0];
            }
            if(bit[i+1]==6&&bit[i]>2){
                ans+=dp[i][1];
            }
            if(bit[i]>6){
                ans+=dp[i-1][1];
            }
            if(bit[i]==4||(bit[i]==2&&bit[i+1]==6)){
                flag=true;
            }
        }
    }
    if(flag)
        ans++;
    return k-ans;
}

int main()
{
    int n,m;
    init();
    while(scanf("%d%d",&m,&n)!=EOF){
        if(n==0&&m==0){
            return 0;
        }
        printf("%lld\n",solve(n)-solve(m-1));
    }
}



相關推薦

HDU2089——不要62數位dp入門

不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 35612    Accepted Submiss

hdu2089 不要62數位dp模板

ac程式碼:#include<iostream> #include<cstring> #include<algorithm> #define r(n) scanf("

HDU2089不要62數位DP入門

Description 給定mm,nn,求mm到nn的所有整數中及不含’4’也不含’62’的數的個數。 Solution 直接數位DP即可。。。 Source /*************

HDU2089 ------不要62數位dp

判斷 tom name pop iostream blank 位置 play show 不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others

HDU2089 不要62數位DP

傳送門 【題目分析】 和windy數一題類似,不過限制條件改為了連續的62和4,列舉當前位填的數字的時候判斷一下即可。 【程式碼~】 #include<bits/stdc++.h> using namespace std; typedef long long LL; co

hdu2089 不要62 數位DP

hdu2089     刷DP  ,經典數位DP       思路:                     1. 確定狀態   dp[ i ] [ j ]  表示i位數,在第i位上 以數值j開頭的值 ,含有符合情況的數的個數              

hdu--2089 不要62數位DP入門題目

題目連結:不要62 不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 53366

2018.09.29【HDU2089不要62數位DP

傳送門 解析: 今天突然發現自己還沒寫過數位DPDPDP入門題。。。 思路: 我們從高位向低位DP,採用記憶化搜尋。 初始化fff陣列為−1-1−1,因為我們可能DPDPDP到某個狀態是沒有合法數的。

HDU 2089 不要62數位DP

註意 break 大小 printf bre 表示 += 理解 ini 題意:求[n,m]內所有數字中不出現4也不出現連續62的數的個數。 輸入:n m,多組數據,以0 0結尾。 輸出:符合條件的數的個數。 限制:(0<n≤m<1000000) 時間:1000

HDU - 2089 不要62數位DP

include scrip panel ans using 交通 += init 遇到 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 題目: Problem Description 杭州人稱那些傻乎乎粘嗒嗒的人

HDU 2089 不要62數位DP入門題】

pan eps ava con 所有 數據 strong mon sub 不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi

hdu 3555 Bomb數位dp入門

Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 24148    Accepted Submissi

HDU2089 不要62數位DP

不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 28103    Accepted Submissi

HDU2089 不要62數位DP 基礎】

不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 60064    Accepted Submissio

不要62數位dp入門題】

不要62Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 50740    Accepted Submi

杭電 hdu 2089 不要62數位dp】【入門

不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 29117    Accepted Submiss

【51nod 1021】石子歸併區間dp入門

1021 石子歸併 基準時間限制:1 秒 空間限制:131072 KB 分值: 20 難度:3級演算法題 收藏 關注 N堆石子擺成一條線。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的代價。計算將N堆石子合併成一堆的最小代價。

51Nod1009 數字1的數量數位dp演算法

數位dp演算法: void dfs(int a,int b,int c[]) { ll n=a/10,m=a%10,t=n; for(int i=0;i<=m;i++) c[i]+=b;//當前位對低位的影響 for(int i=0;i<10;i++)

樹形dp入門

題目一:Anniversary party  題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1520 題意:有n個客人,每個客人有一個開心值,然後客人K是客人L的主管,客人K和客人L不能一起被邀請參加party,問:邀請人的最大開

hdu 2089 不要62數位dp

題意:給定一個範圍n~m,求出數中不存在4和連續62的數的個數。 數位dp經典入門題。 #include<bits/stdc++.h> using namespace std; #define ll long long int digit[20]; ll dp