HDU 2089 不要62 數字DP

2021-08-18 18:58:23 字數 1924 閱讀 7752

題目鏈結

思路

一切都在**注釋中

ac**

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define clr(a, b) memset(a, (b), sizeof(a))

#define pb push_back

using

namespace

std;

typedef

long

long ll;

typedef

long

double ld;

typedef

unsigned

long

long ull;

typedef pair pii;

typedef pair pll;

typedef pair psi;

typedef pair pss;

typedef pair pil;

const

double pi = acos(-1.0);

const

double e = exp(1.0);

const

double eps = 1e-8;

const

int inf = 0x3f3f3f3f;

const ll llinf = 0x3f3f3f3f3f3f3f3f;

const

int maxn = 1e2 + 5;

const

int mod = 1e9;

int dp[10][3];

/* * 狀態0: dp[i][0] 長度為i 不含有不合格數字的個數

* 狀態1: dp[i][1] 長度為i 最高位為2 不含有不合格數字的個數

* 狀態2: dp[i][2] 長度為i 含有不合格數字的個數

* 擴充套件最高位: 意思是在當前長度下 在最高位的左邊再加一位 比如說 x 表示 長度為i的所有數字 那麼 2x 就表示 擴充套件最高位為2 長度為i的所有數字 實際上2x的長度為i + 1

*/void init()

}int solve(int x)

bit[pos + 1] = 0;

bool flag = false;

// 標記當目前為止 列舉的高位中 有沒有出現過4或者62 true 表示出現過 4 或者 62

int ans = 0;

// ans 記錄的是 所有不符合要求的數字 最後答案就是 x - ans

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

if (bit[i] == 4 || (bit[i + 1] == 6 && bit[i] == 2))

flag = true;

// 用來判斷 高位是否出現過4或者62 以及判斷本數字是否是不合格的數字

}if (flag)

ans++;

// 若本數字是不合格數字 需要加上

return tmp - ans;

}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 表示不存在不吉利數字,且最...