hdu 2089 不要62
題目大意是統計【a,b】區間內沒有4並且沒有62的數,因為有之前那道題的鋪墊,很快想到了解決方法。
思路:預處理乙個dp陣列,dp【i,j】代表最高位為 j 的 i 位數滿足題述要求的的個數;然後分別統計【0,b】和【0,a-1】區間內滿足條件的數——與之前那題類似,不過更簡單了,具體來看**吧:
**
#include
using
namespace
std;
int n,m,dp[10][10],num[10],cnt,ans;
int solve(int n)
num[cnt+1]=0;
for(int k=cnt;k>=1;k--)
if(num[k]==4||(num[k+1]==6&&num[k]==2))
break;
}return ans;
}int main()
return
0;}
從**看,我們求解【0,b】區間內符合條件的數的方法依舊類似,從最高位(k = cnt)開始,每次取一位,統計最高位為 i 的數的個數(0 <= i <= num[k]),於是變成下面的**:
for(int k=cnt;k>=1;k--)
if(num[k]==4||(num[k+1]==6&&num[k]==2))
break;
}
這裡有乙個需要注意的地方:如果之前的的數字已經出現不符合的情況了,那麼我們就不應該繼續統計下去!(因為這個wa了一次)
總結
理解過上一道數字dp之後,看這道題並不會那麼吃力了,其實兩道題本質上是差不多的,只是最後進行數字統計的部分有點不同(難怪當時ta說砍樹那題是經典題)。
動態規劃學習系列 數字DP(練手三)
hdu 3652 解題思路 數字dp,狀態dp i j k c 表示 i 位數中,以 j 開頭的,模13為k的數的統計情況,其中 c 可取0或者1,0表示不包含13,1表示包含,這樣我們就可以把所有的數分成兩部分,設計狀態轉移方程。1 狀態轉移方程 dp i j tmp j l 13 1 dp i ...
動態規劃學習系列 數字DP(初識)
第一次知道數字dp這東西,是在大二新手賽,那時有一道 cutting trees 的題目,現在來看就是水題一道,可以用多種方法水過,可惜當時愣是沒做出來,其他水題也沒做出來,於是被大一虐成翔。抱著學習的態度,我們再來看看這道題。多組詢問,每組詢問a和b,為 a,b 範圍內,有多少個數是由乙個上公升序...
動態規劃之數字dp
數字dp,字面意思理解就是在數字的每一位上面去dp,動態規劃一般有兩種 遞推,記憶化搜尋 dfs 這裡就是用的記憶化。一般這種用在計數上面,對那些數字上面有限制的計數。這裡上一道模板題 題中就是要你統計1 n裡有 49 的個數。dp pos sta 表示到第pos位,狀態為sta的總數。我們一般是從...