解析:
對於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 #includeusing
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.這個題應該是乙...