藍橋杯練習

2021-09-12 06:42:39 字數 1858 閱讀 4432

k好數

問題描述

如果乙個自然數n的k進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是k好數。求l位k進製數中k好數的數目。例如k = 4,l = 2的時候,所有k好數為11、13、20、22、30、31、33 共7個。由於這個數目很大,請你輸出它對1000000007取模後的值。

輸入格式

輸入包含兩個正整數,k和l。

輸出格式

輸出乙個整數,表示答案對1000000007取模後的值。

樣例輸入

4 2樣例輸出

7資料規模與約定

對於30%的資料,kl <= 106;

對於50%的資料,k <= 16, l <= 10;

對於100%的資料,1 <= k,l <= 100。

一道dp題,最近也一直在練dp

其實看出求解問題的子問題不難的,就是找到狀態轉移方程有點小困難

這個題中,我們可以設dp[i][j]為選定第i位時,放數字j 的個數,那麼我們就可以得出狀態轉移方法,dp[i][j]+=dp[i-1][u] (列舉u能取得每乙個值,數量加起來)

需要注意的是,我們的子問題是去掉第乙個數時的數量而不是最後乙個,換句話說就是我們不斷在數字最前面加數。

#include

using namespace std;

const

int n=

1e9+7;

long

long dp[

105]

[105];

long

long ans=0;

int main ()}

}for

(int i=

1;i) cout<

return0;

}

計蒜客藍橋模擬賽

馬的管轄

在中國象棋中,馬是走日字的。乙個馬的管轄範圍指的是當前位置以及一步之內能走到的位置,下圖的綠色旗子表示馬能走到的位置。

如果一匹馬的某個方向被蹩馬腳,它就不能往這個方向跳了,如下圖所示,海星的位置存在旗子,馬就不能往上跳到那兩個位置了:

那麼問題來了,在乙個 n×m 的棋盤內,如何用最少的馬管轄住所有n×m 個格仔

當 n=m=5時,請你求出用最少馬管轄的 方案個數。

思路是暴力,5x5的棋盤,每個格仔用 代表放不放馬來搜尋所有可能的情況,既然是個填空題,算出答案就好了(本地都跑了好久…)

#include

using namespace std;

const

int inf =

0x3f3f3f3f;5

][5]

;int x;

int d[26]

;int dir[8]

[2]=

;int dir[8]

[2]=

;int ans;

intf

(int n)

}for

(int i=

0;i<

5;i++)}

}}for(

int i=

0;i<

5;i++)}

}return ans;

//返回馬的個數

}int main ()}

for(

int i=

0;i<

26;i++)}

return0;

}

藍橋杯練習

題目完成時間2021年3月16日 題目 計算機真是最傻的東西 他都不能計算大於10 65 1的a b,請你幫這個 最傻 的東西過關,否則它就真的只認識1和0了。輸入格式 共兩行 第一行輸入乙個整數a 第一行輸入乙個整數b。輸出格式 共一行,乙個表示a b的整數。樣例輸入 2147483647 214...

藍橋杯 基礎練習

basic 1 閏年判斷 給定乙個年份,判斷這一年是不是閏年。當以下情況之一滿足時,這一年是閏年 年份是4的倍數而不是100的倍數 年份是400的倍數。include using namespace std intmain basic 2 01字串 對於長度為5位的乙個01串,每一位都可能是0或1,...

藍橋杯 練習(2 23)

給出n個數,找出這n個數的最大值,最小值,和。第一行為整數n,表示數的個數。第二行有n個數,為給定的n個數,每個數的絕對值都小於10000。輸出三行,每行乙個整數。第一行表示這些數中的最大值,第二行表示這些數中的最小值,第三行表示這些數的和。51 3 2 4 55 2 111 n 10000。inc...