HDU-5898 數(shù)位DP [2016青島網(wǎng)絡賽]

還是數(shù)位DP樊零,還是沒做出來我磁,模型是理解得可以了,編碼的時候姿勢不好驻襟,還是沒辦法通過的十性。
要學多點姿勢,還是要多做題目塑悼。

找出[1,N]當中連續(xù)奇數(shù)位長度為偶數(shù)、連續(xù)偶數(shù)位為奇數(shù)的數(shù)字楷掉。
一般的姿勢肯定想到以末尾段數(shù)位的奇偶性和其長度的奇偶性作為狀態(tài)做記憶化搜索厢蒜,本想著統(tǒng)一一下狀態(tài)分類霞势,降成一維狀態(tài),結果是自作聰明斑鸦,在處理前導零的時候更加麻煩愕贡。
好的姿勢可以避免重復計算非法的前導零,用一個狀態(tài)位標記當前位前面合法連續(xù)串的長度巷屿,這個長度為0的時候說明要么前面非法了固以,要么前面是前導零,都特殊處理就行了嘱巾。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
using namespace std;

long long dp[25][10][25];
int bit[25];
long long dfs(int pos, int istop, int p, int x){
    if (pos==-1){ 
        //邊界條件憨琳,判斷當前考慮的連續(xù)串的數(shù)位奇偶性和長度奇偶性
        //這里因為題目不會問到0,所以0當成非法串
        if (x && x%2!=p%2) return 1;
        else return 0;
    }
    if (!istop && dp[pos][p][x]!=-1) return dp[pos][p][x];

    int lastbit = istop ? bit[pos] : 9;
    long long ans = 0;
    for (int i=0;i<=lastbit;i++){
        if (x==0){ 
            //如果考慮的串長度是0旬昭,說明前面都是前導零篙螟,特殊處理一下
            if (i==0) ans += dfs(pos-1, istop&&i==lastbit, i, 0); //長度還是0
            else ans += dfs(pos-1, istop&&i==lastbit, i, 1); //遇見非零數(shù)位,長度置1
        }
        else { 
            //長度不為0的時候
            if (p%2 == i%2) ans += dfs(pos-1, istop&&i==lastbit, i, x+1); 
            //如果數(shù)位奇偶性不變问拘,長度加1
            else if (x%2 != p%2) ans += dfs(pos-1, istop&&i==lastbit, i, 1); 
            //數(shù)位奇偶性發(fā)生變化的時候遍略,記得判斷結束的串的合法性
        }
    }

    if (!istop) dp[pos][p][x] = ans;
    return ans;
}

long long calc(long long n){
    if (n==0) return 0;
    int cnt = 0;
    while(n){
        bit[cnt++] = n%10;
        n /= 10;
    }
    memset(dp,-1,sizeof(dp));
    return dfs(cnt-1, 1, 0, 0);
}

int main()
{
    int t,kase=0;
    scanf("%d",&t);
    while(t--){
        long long l,r;
        scanf("%I64d%I64d",&l,&r);
        printf("Case #%d: %I64d\n",++kase, calc(r)-calc(l-1));
    }
    return 0;
}

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市骤坐,隨后出現(xiàn)的幾起案子绪杏,更是在濱河造成了極大的恐慌,老刑警劉巖纽绍,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蕾久,死亡現(xiàn)場離奇詭異,居然都是意外死亡顶岸,警方通過查閱死者的電腦和手機腔彰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辖佣,“玉大人霹抛,你說我怎么就攤上這事【硖福” “怎么了杯拐?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長世蔗。 經(jīng)常有香客問我端逼,道長,這世上最難降的妖魔是什么污淋? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任顶滩,我火速辦了婚禮,結果婚禮上寸爆,老公的妹妹穿的比我還像新娘礁鲁。我一直安慰自己盐欺,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布仅醇。 她就那樣靜靜地躺著冗美,像睡著了一般。 火紅的嫁衣襯著肌膚如雪析二。 梳的紋絲不亂的頭發(fā)上粉洼,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音叶摄,去河邊找鬼属韧。 笑死,一個胖子當著我的面吹牛准谚,可吹牛的內(nèi)容都是我干的挫剑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柱衔,長吁一口氣:“原來是場噩夢啊……” “哼樊破!你這毒婦竟也來了?” 一聲冷哼從身側響起唆铐,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哲戚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后艾岂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顺少,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年王浴,在試婚紗的時候發(fā)現(xiàn)自己被綠了脆炎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡氓辣,死狀恐怖秒裕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钞啸,我是刑警寧澤几蜻,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站体斩,受9級特大地震影響梭稚,放射性物質發(fā)生泄漏。R本人自食惡果不足惜絮吵,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一弧烤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蹬敲,春花似錦扼褪、人聲如沸想幻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至闹究,卻和暖如春幔崖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渣淤。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工赏寇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人价认。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓嗅定,卻偏偏與公主長得像,于是被迫代替她去往敵國和親用踩。 傳聞我的和親對象是個殘疾皇子渠退,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容