杭電OJ 2089 不要62

2021-09-26 02:06:42 字數 1953 閱讀 9860

problem description

杭州人稱那些傻乎乎粘嗒嗒的人為62(音:laoer)。

杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。

不吉利的數字為所有含有4或62的號碼。例如:

62315 73418 88914

都屬於不吉利號碼。但是,61152雖然含有6和2,但不是62連號,所以不屬於不吉利數字之列。

你的任務是,對於每次給出的乙個牌照區間號,推斷出交管局今次又要實際上給多少輛新的士車上牌照了。

input

輸入的都是整數對n、m(0output

對於每個整數對,輸出乙個不含有不吉利數字的統計個數,該數值佔一行位置。

sample input

1 100

0 0sample output

這個題用到數字dp(動態規劃)的思想,詳解請參考博文

「數字dp」歸根結底就以深度優先搜尋的方式,列舉某區間內的數字,並求解出符合約束條件的數字的個數。

以統計765範圍內不包含「4」和「62的數字的個數為例。

我們先把整形數字765變為字串,寫到字元型陣列中。以深度搜尋的方式來統計0-765範圍內符合要求的數字的個數。

設定兩個指標,前位指標pre和當前位指標pos,再深搜過程中,pre指向當前位的上一位,pos則指向當前位。

從最高位開始深搜,如果發現前位指標pre對應的值是「6」,當前位指標pos對應的值是「2」,或者pos對應的值是「4」,說明這個數是不合法的,需要更換當前位的值,或者是回溯到上一位並更換上一位的值,然後繼續從相應的位置深搜。如果從最高位一直深搜到最低位而沒有出現「62」或「4」,說明我們已經找到了一串符合要求的數字,納入統計。

假設題目給定的範圍是m-n,分別計算出m中不包含「4」和「62」的數字個數和n中不包含「4」和「62」的個數,再把這兩個數相減,就得到我們想要的結果。

#include#include#includeusing namespace std;

typedef long long ll;

int a[20];

int dp[20][2];

int dfs(int pos,int pre,int sta,bool limit)

if(!limit) dp[pos][sta]=tmp;

return tmp;

}int solve(int x)

return dfs(pos-1,-1,0,true);

}int main()

return 0;

}

另外附上數字dp的模板:

typedef long long ll;

int a[20];

ll dp[20][state];//不同題目狀態不同

ll dfs(int pos,/*state變數*/,bool lead/*前導零*/,bool limit/*數字上界變數*/)//不是每個題都要判斷前導零

//計算完,記錄狀態

if(!limit && !lead) dp[pos][state]=ans;

/*這裡對應上面的記憶化,在一定條件下時記錄,保證一致性,當然如果約束條件不需要考慮lead,這裡就是lead就完全不用考慮了*/

return ans;

}ll solve(ll x)

return dfs(pos-1/*從最高位開始列舉*/,/*一系列狀態 */,true,true);//剛開始最高位都是有限制並且有前導零的,顯然比最高位還要高的一位視為0嘛

}int main()

}

注:解題思路,實現**,演算法模版均參考自博文侵刪),在這裡向博文作者大佬致敬。

杭電2089 不要62

problem description 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 ...

杭電ACM 2089 不要62

這個題目的意思就是從給定的乙個數字範圍內,求出不包含不吉利數字4或者62的數字個數。所以主要問題是如何判斷該數是不是吉利數字,我的想法是對於乙個數字,一位一位的進行判斷該位是否為4或者連續兩位是否為62。這個很容易實現,一開始我寫的 如下 include using namespace std in...

數字DP HDU2089 不要62

problem description 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 ...