藍橋杯1117 k 進製數

2021-10-03 06:41:46 字數 1427 閱讀 2050

考慮包含n位數字的k-進製數. 定義乙個數有效, 如果其k-進製表示不包含兩連續的0.

例:1010230 是有效的7位數

1000198 無效

0001235 不是7位數, 而是4位數.

給定兩個數n和k, 要求計算包含n位數字的有效k-進製數的總數.

假設2 <= k <= 10; 2 <= n; 4 <= n+k <= 18.

輸入

兩個十進位制整數n和k

輸出

十進位制表示的結果

樣例輸入210

樣例輸出

90題意就是給n個位置,放k進製的數,不能有連續兩個0出現。問有多少個這種數。

方法1:動態規劃:

新的一位受到舊的一位的影響,設當前位置有兩種狀態,1表示當前這一位不是0,0表示當前這一位是0;

用dp[i][0]表示第i位的數是0;dp[i][1]表示第i位的數是1;

所以dp[i+1][0]=dp[i][1];

dp[i+1][1]=(dp[i][1]+dp[i][0])*(k-1);

**:

#include

#include

#include

#define maxn 100

using

namespace std;

typedef

long

long ll;

ll dp[30]

[10];

intmain()

printf

("%lld\n"

,dp[n-1]

[1]+dp[n-1]

[0])

;return0;

}

dfs:

拿0-k-1那幾個數去填每一位,搜尋一下就可以惹

**:

#include

#include

#include

#define maxn 100

using

namespace std;

typedef

long

long ll;

ll n,m;

ll ans;

ll flag[30]

;void

dfs(

int step)

for(ll i=

0;i) flag[step]

=i;dfs

(step+1)

;}}int

main()

問題 1117 K 進製數

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

題目 1117 K 進製數

題目的意思就乙個n位的k進製數中不能有2個及2個以上的0是相鄰的,問這樣的數一共有多少個 首位肯定不能為0,前面的數如果為0則後面的數可以是除了0以外的任意數,前面的數如果不為0則後面的數就可以為任意值。實現只不過是模擬上面的過程,用乙個標記指示某一位是不是為0,如果前一位是0,那當前這位就一種情況...

題目 1117 K 進製數

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