1. 程式人生 > >【HDU2089】不要62(數位DP入門題)

【HDU2089】不要62(數位DP入門題)

Description

給定m,n,求mn的所有整數中及不含’4’也不含’62’的數的個數。

Solution

直接數位DP即可。。。

Source

/****************************
 * Au: Hany01
 * Prob: [HDU2089] 不要62
 * Date: Feb 19th, 2018
 * Email: [email protected]
****************************/

#include<bits/stdc++.h>

using namespace std;

typedef long
long LL; typedef pair<int, int> PII; typedef vector<int> VI; #define rep(i , j) for (int i = 0 , i##_end_ = j; i < i##_end_ ; ++ i) #define For(i , j , k) for (int i = (j) , i##_end_ = (k) ; i <= i##_end_ ; ++ i) #define Fordown(i , j , k) for (int i = (j) , i##_end_ = (k) ; i >= i##_end_ ; -- i)
#define Set(a , b) memset(a , b , sizeof(a)) #define SZ(a) ((int)(a.size())) #define ALL(a) a.begin(), a.end() #define pb(a) push_back(a) #define mp(a, b) make_pair(a, b) #define INF (0x3f3f3f3f) #define INF1 (2139062143) #define Mod (1000000007) #define y1 wozenmezhemecaia #ifdef hany01 #define debug(...) fprintf(stderr , __VA_ARGS__)
#else #define debug(...) #endif inline void File() { #ifdef hany01 freopen("hdu2089.in" , "r" , stdin); freopen("hdu2089.out" , "w" , stdout); #endif } template<typename T> inline bool chkmax(T &a, T b) { return a < b ? a = b, 1 : 0; } template<typename T> inline bool chkmin(T &a, T b) { return b < a ? a = b, 1 : 0; } inline int read() { register char c_; register int _ , __; for (_ = 0 , __ = 1 , c_ = getchar() ; !isdigit(c_) ; c_ = getchar()) if (c_ == '-') __ = -1; for ( ; isdigit(c_) ; c_ = getchar()) _ = (_ << 1) + (_ << 3) + (c_ ^ 48); return _ * __; } const int maxl = 9; int dp[maxl][2], cnt, a[maxl]; int dfs(int pos, int pre, int sta, int lmt) //'pre' stands for the last number, 'sta' stands for whether the last number is '6'. { if (!pos) return 1; if (!lmt && dp[pos][sta] >= 0) return dp[pos][sta]; register int tmp = 0; For(i, 0, lmt ? a[pos] : 9) if ((pre != 6 || i != 2) && i != 4) tmp += dfs(pos - 1, i, i == 6, lmt && i == a[pos]); if (!lmt) dp[pos][sta] = tmp; return tmp; } inline int Solve(int t) { cnt = 0; while (t) a[++ cnt] = t % 10, t /= 10; return dfs(cnt, -1, 0, 1); } int main() { File(); register int n, m; Set(dp, -1); while (n = read(), m = read(), n || m) printf("%d\n", Solve(m) - Solve(n - 1)); return 0; }

相關推薦

HDU2089不要62數位DP入門

Description 給定mm,nn,求mm到nn的所有整數中及不含’4’也不含’62’的數的個數。 Solution 直接數位DP即可。。。 Source /*************

2018.09.29HDU2089不要62數位DP

傳送門 解析: 今天突然發現自己還沒寫過數位DPDPDP入門題。。。 思路: 我們從高位向低位DP,採用記憶化搜尋。 初始化fff陣列為−1-1−1,因為我們可能DPDPDP到某個狀態是沒有合法數的。

HDU2089——不要62數位dp入門

不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 35612    Accepted Submiss

Hdu2089不要62(數位DP)

退出 -m math 數組 down clas code size amp Description 題目大意:給定區間[n,m],求在n到m中沒有“62“或“4“的數的個數。 如62315包含62,88914包含4,這兩個數都是不合法的。 0<n<=m<1

hdu2089不要62 數位dp

傳送門:嘿原題在這 註釋寫的很詳細啦 #include<iostream> #include<cstdio> #include<cstring> using

HDU2089 ------不要62數位dp

判斷 tom name pop iostream blank 位置 play show 不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others

HDU2089 不要62數位DP

傳送門 【題目分析】 和windy數一題類似,不過限制條件改為了連續的62和4,列舉當前位填的數字的時候判斷一下即可。 【程式碼~】 #include<bits/stdc++.h> using namespace std; typedef long long LL; co

hdu2089 不要62數位dp模板

ac程式碼:#include<iostream> #include<cstring> #include<algorithm> #define r(n) scanf("

hdu2089 不要62 數位DP

hdu2089     刷DP  ,經典數位DP       思路:                     1. 確定狀態   dp[ i ] [ j ]  表示i位數,在第i位上 以數值j開頭的值 ,含有符合情況的數的個數              

HDU 2089 不要62數位DP

註意 break 大小 printf bre 表示 += 理解 ini 題意:求[n,m]內所有數字中不出現4也不出現連續62的數的個數。 輸入:n m,多組數據,以0 0結尾。 輸出:符合條件的數的個數。 限制:(0<n≤m<1000000) 時間:1000

hdu2089不要62

string sin 範圍 完全 std iostream ont 初始化 不同的 驚奇地發現今天居然和dalao的題單重了不少23333333333333 這是我第一次做數位dp,感覺這個題目還是比較茲磁的 #include<iostream> #i

HDU - 2089 不要62數位DP

include scrip panel ans using 交通 += init 遇到 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 題目: Problem Description 杭州人稱那些傻乎乎粘嗒嗒的人

hdu--2089 不要62數位DP入門題目

題目連結:不要62 不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 53366

2018.09.29BZOJ1026洛谷P2657SCOI2009windy數數位DP

洛谷傳送門 解析: 由於資料範圍很小(相對於大部分數位DPDPDP題來說)。 我們只記錄當前位,當前位數字,是否是前導0,是否達到上界。 簡單DP記憶化搜尋一下就好了。 程式碼: #include

HDU 2089 不要62數位DP入門

pan eps ava con 所有 數據 strong mon sub 不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi

2018.11.07校內模擬異或數位DP數學期望

傳送門 解析: 蒟蒻考場上只想了隨機情況下的期望,於是就拿了部分分滾粗了。。。 其實最優情況下的期望我好像還推錯了,最後學習了標解才會的。 我好菜啊。。。希望今年NOIP不要打醬油就行了。 思路: 首先隨機的情況其實非常好想。我們只需要考慮每個位出現

2018.09.29洛谷P2106Sam數數位DP矩陣快速冪

傳送門 解析: 其實這種只用位數轉移的數位DPDPDP,大概都可以用矩陣快速冪推。本質原因是每層的轉移方程與這是第幾層無關,比如這道題。 思路: 可以發現一個很顯然的情況,就是上面說的,這道題可以矩陣

Poj3133Manhattan Wiring 插頭DP

但是 之間 main man sin pri cstring urn break Description 題目大意:給你個N x M(1≤N, M≤9)的矩陣,0表示空地,1表示墻壁,2和3表示兩對關鍵點。現在要求在兩對關鍵點之間建立兩條路徑,其中兩條路徑不可相交或者自交(

CCF有趣的數 數位dp

clu 有趣 sizeof clas tdi return CA queue In 【思路】 dp[i][j]表示前i個數為第j種狀態,考慮6種狀態 0: 出現且僅出現 2 1: 出現且僅出現 2 0 2: 出現且僅出現 2 3 3: 出現且僅出現 2 0 1 4: 出現且

POJ1935 Journey樹形dp

scan AR urn vector 答案 span ace CA include 題目 傳送門:QWQ 分析 涼涼。 答案是所有要經過的點到根所經過的邊權和減去最大的邊權。 代碼 vector好慢啊 #include <