題意:就是統計區間內沒有4和62的數的個數
分析:dp(i,0)表示i位數不存在不吉利數的個數,dp(i,1)表示i位數不存在不吉利數並且最高位為2的個數,dp(i,2)表示i位數存在不吉利數的個數
首先對dp陣列進行乙個預處理,處理出i位數出現上述情況的個數,統計的時候都有統計字首0
dp(i,0) = dp(i-1,0)*9-dp(i-1,1) 前面*9是減去4在首位的情況,後面是減去6在首位並且i-1位為2
dp(i,1) = dp(i-1,0)
dp(i,2) = dp(i-1,2)*10+dp(i-1,0)+dp(i-1,1) i-1位數是不吉利數的情況*首位的十個數,加上4在首位,i-1位為吉利數,加6在首位,i-1位為2的吉利數
接著就是分解n成i位數,統計i位數的情況
#include using namespace std;
int dp[10][3]; //dp(i,0)表示i位數不存在不吉利的數 dp(i,1)表示i位數最高位為2且不存在不吉利的 dp(i,2)表示i位數存在不吉利的數
void init()
}int solve(int n)
dig[cnt+1] = 0;
int ans = 0;
for(int i = cnt;i > 0;i--)
if(dig[i] == 4 || (dig[i+1] == 6 && dig[i] == 2))
flag = 1;
}return tmp - ans;
}int main()
return 0;
}
HDOJ 2089 不要62(數字DP入門)
題意 求 l,r 區間內有多個數滿足不含62和4.這個題暴力也可以做因為範圍比較小。但是如果數的上限開到1e9或者更大就gg了。所以學習一種新的dp 數字dp。也沒學得怎麼樣。我的理解是 數字dp是按照構造數的方式,然後對數的每一位進行dp 舉乙個簡單的dp dp i j 表示的是第 i 位,前一位...
hdoj2089不要62(素數打表)
description 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 62315 73...
HDU 2089 數字 dp 入門
可暴力,可dp。參考資料 click me 第二個版本的 參考資料 7k 的板子 第二個版本 在下面 做這道題的時候有兩個疑問 第一 既然在dp中 51 既可以看做 51 也可以看做 0051 或者 000051 那麼51這個數字會不會計算多次。第二 既然狀態轉移保證了數字的合法,在統計的時候是否還...