藍橋杯 K 進製數 DFS

2022-01-19 11:28:15 字數 1172 閱讀 8926

解析:

對於k進製數,每個位置的數是0~k-1的。

首先看首位,必不能為0,那麼有k-1種選法 。

定義idx,表示當前不為0的位置下標。

接下來,有兩種選擇,乙個是第二位為0,乙個是第二位不為0。

如果要第二位為0,那麼就把idx+2,跳到第三位,當前數目為(k-1)^2

如果第二位不為0,那麼,idx+1到達第二位,如果接下來第三位還不為0,那麼數目到了(k-1)^3

可以發現,每一步,有兩種選擇方式,要麼隔乙個0,idx+2;要麼接著放k-1種,idx+1。所以,這是乙個dfs的過程。

我們每次跳的idx的位置,都是非0位,所以每次都要乘(k-1),跳了幾次,就是幾次冪,就是這個step

如果idx==n了,說明最後一位不為0

如果idx==n+1了,說明最後一位為0,那麼總數就需要少算一位,為(k-1)^(step-1)

#include #include

using

namespace

std;

typedef

long

long

ll;const

int maxn =1e2+30

;int

n,k;

int cnt = 0

;void dfs(int idx,int

step)

;

if(idx==n)

if(idx==n+1

)

for(int i=0;i<=1;i++)

}int

main()

藍橋杯 K 進製數

時間限制 1sec 記憶體限制 128mb 提交 152 解決 46 題目描述 考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.例 1010230 是有效的7位數 1000198 無效...

藍橋杯 K 進製數

題目描述 考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.例 1010230 是有效的7位數 1000198 無效 0001235 不是7位數,而是4位數.給定兩個數n和k,要求計算包...

藍橋杯K進製數題解

考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.例 1010230 是有效的7位數 1000198 無效 0001235 不是7位數,而是4位數.給定兩個數n和k,要求計算包含n位數字的有效k 進製數的總數.假設2 k 10 2 n 4 n k 18.這個題應該是乙...