poj3252(數字dp)(模板)

2022-08-21 19:12:07 字數 577 閱讀 5021

題意:求[l,r]之間的round number數,rn數即化為二進位制後0的個數不少於1的個數的數。

思路:之前用組合數求寫過,最近學數字dp,又用數字dp來寫一次。用dp[pos][n0][n1]表示長為pos+1的數(我從0開始定義的),之前已經有n0個0和n1個1的前提下rn數有多少,用lead表示是否前導0,最後的遞迴終止條件為if(pos==-1) return n0>=n1。

ac**:

#include#include

using

namespace

std;

int a[35],dp[35][35][35

];int dfs(int pos,int n0,int n1,bool lead,bool

limit)

else

}if(!limit&&!lead) dp[pos][n0][n1]=tmp;

return

tmp;

}int solve(int

x)

return dfs(pos-1,0,0,true,true);}

intmain()

poj 3252 數字dp 數字統計)

就是統計每個數不算本身的round數,具體解法如下 前前後後做過三遍,每一次都wa了好多次 dp解法 include include include include define max 40 using namespace std typedef int ll ll dp max max void...

poj3252 組合數學

題意 給出乙個範圍,然後問這個範圍內有幾個是round number round number也就是轉化二進位制後,的個數大於等於 的個數 思路 這是乙個組合計數的問題 我們拿乙個二進位制長度為 的數舉例子 如果長度為 那麼所有長度為 以下的數字,肯定都是在範圍內的,那麼我們就要找出所有符合條件的數...

poj3252組合數學

題意 乙個數轉換成二進位制數,零的個數大於等於一的個數的數稱為圓數,例如9轉換成1001,0的個數為2,1的個數為2,所以9為圓數 輸入兩個數start和end,問start到end有多少個圓數。思路 start到end中有多少個圓數,我們只需要求出num 0,start 和num 0,end nu...