題目鏈結
思路
一切都在**注釋中
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 表示不存在不吉利數字,且最...