BOZJ1833詳細題解

2021-09-24 13:53:47 字數 2018 閱讀 5068

bozj1833

給定兩個正整數a和b,求在[a,b]中的所有整數中,每個數碼(digit)各出現了多少次。

輸入檔案中僅包含一行兩個整數a、b,含義如上所述。

輸出檔案中包含一行10個整數,分別表示0-9在[a,b]**現了多少次。

​ 1 99

​ 9 20 20 20 20 20 20 20 20 20

說是一道典型的數字dp的問題.首先我們解決什麼是數字dp的問題.現在有乙個題目,就是要求你求出[l,r]區間內滿足一定條件的數的個數,這時我們很容易想到暴力求解的方案,但是一旦資料範圍過大這種方法就行不通了,這個時候就用數字dp來解決,把數字拆成乙個乙個的進製,然後逐一比較看是否滿足題目要求.

那麼針對這個問題,如何求解呢.

首先我們要做的事情是找到從0-r所含0-9的個數,再用它減去0-l-1的0-9的個數.因為題目要求我們求得是[l,r]必須包括l,這樣相減得到的區間恰為[l,r].那麼現在我們需要求解的問題是一樣的即求某個數x,從[0-x]中所含0-9的個數.

我們用f[i][j][k]來表示長度為i,首位為j,所含k的個數為多少.那麼f[i][j][k]是要等於f[i-1][0-9][k],注意我們所要求的是長度為i,首位為j,所含k的個數是多少.舉個例子的話就是求200-299所含k的個數是多少.我們拋開首位來看的話,首先我們是不是就要求出00-99所含k的個數是多少再往下推,得到我們需要的遞推式.

f[i][j][k] = f[i][j][k] + f[i-1][j][k],這裡我們是列舉了從00-99對於之後的首位,從200-299出現100次,所以首位出現的次數就是10i次方,我們再加上即可,此時j == k

那麼初始化的函式為

public

static

void

gen(

)//算10^i

//14是因為題目給的範圍就只有那麼大

for(

int j =

0; j <

10; j++

)for

(int i =

2; i <

14; i++)if

(j == k)}}

}}

現在我們開始找[0-l-1]的值了

首先我們要求出l-1的長度s

接著由於是從[0-l-1]所以我們首先要求的就是長度從1-s-1首位從[1-9]的各個位置的和注意此時沒有0

舉個例子的話就是我們現在求0-475,我們先求0-99的各個位置的和,之後我們再求100-199 200-299 300-399的各個位置的和,此時我們想要接著求400-475的值對吧?這個時候我們考慮每一位的情況,前面的4需要出現76次對吧,這裡是不用計算的,接著是考慮400 - 409 410-419 420-429 430-439 440-449 450-459 460-469注意此時我們列舉的首位開始出現0,在考慮下一位的話跟之前考慮的一樣7會出現6次 .76 = 475%100+1 6 = 473%10+1

**的理解的話,建議參照上面的解釋,自己也是理解了好長一段時間

public

static

void

solve

(long s,

int lam)

long os = s;

long[

] dat =

newlong[14

];int len =0;

while

(s >0)

for(

int i =

1;i < len;i++)}

}for

(int i = len;i >

0;i--

)for

(int k =

0;k <

10;k++)}

int t = dat[i]

.intvalue()

; ans[t]+=(

long)(

((os % pow[i])+

1)* lam);}

}

希望對你能夠有所幫助?

題解 P1833 櫻花

有 n 棵櫻花,有三種 只能看一次 最多看 a i 遍 能無限看 看每棵櫻花都需要一定時間 t i 求從 t s 開始,到 t e 結束 時間 最多能看多少櫻花。混合揹包板子,01 揹包相當於 1 個物品的多重揹包,完全揹包相當於 inf 個物品的多重揹包,都用多重揹包即可。要二進位制拆分優化,注意...

數字DP入門 BZOJ 1833 題解(需要複習)

顯然,這篇部落格受popoqqq的影響,自己敲了一遍,基本上和popoqqq的 一樣,在這裡寫一下題解 題目 time limit 3 sec memory limit 64 mb submit 3421 solved 1510 給定兩個正整數a和b,求在 a,b 中的所有整數中,每個數碼 digi...

螺旋折線 詳細題解

如圖p1.png所示的螺旋折線經過平面上所有整點恰好一次。對於整點 x,y 我們定義它到原點的距離dis x,y 是從原點到 x,y 的螺旋折線段的長度。例如dis 0,1 3,dis 2,1 9 給出整點座標 x,y 你能計算出dis x,y 嗎?輸入格式 x和y 對於40 的資料,1000 x,...