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...