題目描述
給定兩個正整數a和b,求在[a,b]中的所有整數中,每個數碼(digit)各出現了多少次
一開始想歪了,想去列舉每一位,然後統計每一位的情況。
轉念一想,數字dp是統計[a,b]內符合條件的數字的個數。
換一種方法,對key~[0,9],統計含1個key,2個key…len(len為數字的長度)個key的數字,然後加一下,就可以得到答案了
#include
using
namespace std;
#include
#include
long
long a,b;
int g[30]
;long
long dp[30]
[30][
2];long
long
dfs(
int key,
int num,
int target,
int pos,
bool limit,
bool sta)
else}if
(!limit&&dp[pos]
[num]
[sta]!=-
1)return dp[pos]
[num]
[sta]
;int up=limit?g[pos]:9
;long
long res=0;
for(
int i=
0;i<=up;i++
)else}if
(!limit) dp[pos]
[num]
[sta]
=res;
return res;
}long
long
solve
(long
long x,
int key)
for(
int i=
1;i<=pos;i++
)return ans;
}int
main()
}
洛谷P2602 ZJOI2010 數字計數 題解
很裸的一道數字dp的板子 定義f 當前列舉到的數字 當前數字之前的答案 列舉的數字 其它的套板子就可以了,要注意一下字首0的判斷 1 include2 include3 include4 include5 include6 include7 using namespace std 8 typedef...
P2602 ZJOI2010 數字計數
題目描述 給定兩個正整數a和b,求在 a,b 中的所有整數中,每個數碼 digit 各出現了多少次。輸入格式 輸入檔案中僅包含一行兩個整數a b,含義如上所述。輸出格式 輸出檔案中包含一行10個整數,分別表示0 9在 a,b 現了多少次。輸入輸出樣例 輸入 1 1 99 輸出 1 9 20 20 2...
P2602 ZJOI2010 數字計數
p2602 題目描述 給定兩個正整數 a 和 b,求在 a,b 中的所有整數中,每個數碼 digit 各出現了多少次。輸入格式 僅包含一行兩個整數 a,b,含義如上所述。輸出格式 包含一行十個整數,分別表示 0 9 在 a,b 現了多少次。1 99 9 20 20 20 20 20 20 20 20...