hdu 2089 不要62 (數字dp入門)

2021-07-29 01:38:33 字數 1893 閱讀 5661

題目鏈結

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

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

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

62315 73418 88914

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

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

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

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

1 100

0 0

很久之前其實做過,但是最近再做一下發現完全忘了==看來學習過程還是要記錄一下的。

一般來說數字dp有兩種常見的寫法,dfs的形式和初始化然後遞推,根據題目不同寫起來複雜程度上可能會有點差異吧==

這是這道題目的兩種寫法

初始化

#include 

using

namespace

std;

const

double eps = 1e-6;

const

double pi = acos(-1.0);

const

int inf = 0x3f3f3f3f;

const

int mod = 1000000007;

#define ll long long

#define cl(a) memset(a,0,sizeof(a))

#define maxn 150010

int dp[10][10],num[10]; //題目中最大位數只有7位,dp[i][j]中i表示當前位置,j表示這個位置上的值

void init()

int cal(int n)

num[len+1]=0; //因為下面比較的時候回用到num[i+1],所以提前放入乙個0避免未初始化出現問題

for(int i=len; i>=1; i--)

if(num[i]==4||(num[i+1]==6&&num[i]==2)) break; //如果這個數字本身這一位已經不滿足條件,那後面的無論怎樣都不能滿足條件,所以直接break

}return ans;

}int main ()

return

0;}

dfs

#include 

#include

#include

#include

#include

using

namespace

std;

const

double eps = 1e-6;

const

double pi = acos(-1.0);

const

int inf = 0x3f3f3f3f;

const

int mod = 1000000007;

#define ll long long

#define cl(a) memset(a,0,sizeof(a))

int dp[11][100],num[100];

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

return limit?ans:dp[pre][pos]=ans;

}int cal(int k)

return dfs(len-1,0,1);

}int main ()

HDU2089 不要62 數字DP

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

Hdu2089 不要62 數字dp

include includeint dp 10 3 dp i 0 為位數小於等於i且不含62也不含4的數字的個數 dp i 1 為位數為i且首位為2且不含62也不含4的數字的個數 dp i 2 為位數小於等於i且含62或4的數字的個數 int digit 10 void er int wei in...

hdu 2089 不要62 (數字dp)

思路 用變數記錄吉利數,和最高位為2的吉利數還有不是吉利數的個數。code include include includeusing namespace std int dp 10 3 dp i j i表示位數,j表示狀態 dp i 0 表示不存在不吉利數字 dp i 1 表示不存在不吉利數字,且最...