BZOJ 1833 ZJOI2010 數字計數

2022-05-21 12:48:11 字數 820 閱讀 5158

沒啥好說的,裸裸的數字\(dp\)。

先列舉當前是算數字\(x\)出現的次數,設\(f_\)表示從高位往低位\(dp\),\(dp\)完了前\(i\)位之後\(x\)出現了\(j\)次的方案數。然後再加一維,表示當前這一位能否自由選數(也就是說之前是否是一路選最大值過來的)。轉移分情況討論一下就好了。

注意這種寫法還有一點情況,就是算\(0\)出現的次數時需要減去區間內前導\(0\)的個數。

下面貼**:

#include#include#include#include#include#define file(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)

using namespace std;

typedef long long llg;

llg l,r,f[21][21][2],mi[21];

int a[21],b[21],l1,l2;

void divide(llg x,int *s,int &len)

llg work(int *s,int n,int x)

else f[i][j][0]+=f[i-1][j][1]*s[i];

if(s[i]==x)

else f[i][j][1]=f[i-1][j][1];

} llg now=0;

for(int i=1;i<=n;i++) now+=i*(f[n][i][0]+f[n][i][1]);

if(!x)

return now;

}int main()

return 0;

}

BZOJ1833 count 數字計數

題目描述 給定兩個正整數a和b,求在 a,b 中的所有整數中,每個數碼 digit 各出現了多少次。輸入輸入檔案中僅包含一行兩個整數a b,含義如上所述。輸出輸出檔案中包含一行10個整數,分別表示0 9在 a,b 中出現了多少次。樣例輸入 1 99樣例輸出 9 20 20 20 20 20 20 2...

BZOJ 1833 count 數字計數

題目描述 給定兩個正整數a和b,求在 a,b 中的所有整數中,每個數碼 digit 各出現了多少次。輸入輸入檔案中僅包含一行兩個整數a b,含義如上所述。輸出輸出檔案中包含一行10個整數,分別表示0 9在 a,b 中出現了多少次。樣例輸入 1 99樣例輸出 9 20 20 20 20 20 20 2...

BZOJ 1833 數字計數 數字DP

題目鏈結 做的第一道數字dp題,聽說是最基礎的模板題,但還是花了好長時間才寫出來。想深入了解下數字dp的請點這裡 先設dp陣列dp i j k 表示數字是i,以j開頭的數k出現的次數 有數字dp的題一般都會用到字首陣列,題目要求我們求b a這個區間裡各個數碼出現的次數,我們可以分別求出 0,b 和 ...