藍橋杯 演算法訓練 K好數(Java解題)
問題描述
如果一個自然數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。
解析:此題用動態規劃思想進行求解。
陣列a[i][j]表示第i位放置數字j的時候k好數的數量,將0到k-1這k個數的a[i][j]相加所得結果即為最後k好數的數量。
a[i][j] = ∑a[i-1][u] (u != j±1 ,0<=u < k, i > 1)初始化a[1][j]= 1 (0<= j < k);
程式碼:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int k, l;
int a[][] = new int[101][101];
Scanner x = new Scanner(System.in);
k = x.nextInt();
l = x.nextInt();
for (int j = 0; j < k; j++)
a[1][j] = 1;
for (int i = 2; i <= l; i++) {
for (int j = 0; j < k; j++) {
for (int u = 0; u < k; u++) {
if (u != j - 1 && u != j + 1) {
a[i][j] += a[i - 1][u];
a[i][j] %= 1000000007;
}
}
}
}
int sum = 0;
for (int u = 1; u < k; u++) {
sum += a[l][u];
sum %= 1000000007;
}
System.out.println(sum);
}
}
相關文章
- 藍橋杯 (java)演算法訓練 數對Java演算法
- 藍橋杯--演算法訓練演算法
- 藍橋杯—演算法訓練演算法
- [Java] 藍橋杯ALGO-117 演算法訓練 友好數JavaGo演算法
- [藍橋杯][演算法訓練VIP]方格取數演算法
- 藍橋杯訓練2
- 藍橋杯 演算法訓練 素因子去重(Java)演算法Java
- 藍橋杯:入門訓練 Fibonacci數列
- 藍橋杯 演算法訓練 操作格子 (線段樹)演算法
- 藍橋杯練習試題程式碼及講解
- 【藍橋杯】練習題目彙總
- 藍橋杯試題 基礎練習 特殊迴文數
- 藍橋杯訓練--母牛的故事(很清晰的思路)
- 藍橋杯練習系統題目集
- 藍橋杯真題:純質數
- 藍橋杯-k倍區間
- 藍橋杯演算法提高——字串匹配(Java)演算法字串匹配Java
- 藍橋杯真題
- Java藍橋杯14年第五題Java
- 藍橋杯:基礎練習 查詢整數
- Java實現 藍橋杯 演算法提高 八數碼(BFS)Java演算法
- 藍橋杯省賽真題2013題解
- 藍橋杯 分巧克力(Java)Java
- 【題解】爬山 藍橋杯2024省B
- 2013藍橋杯題解c++A組C++
- [藍橋杯][演算法提高VIP]大數加法演算法
- 藍橋杯-帶分數
- 藍橋杯-排列序數
- 藍橋杯 整數拼接
- 閒聊藍橋杯JAVA - 生成迴文數Java
- 藍橋杯-日期問題
- 藍橋杯-座次問題
- 2024SMU藍橋訓練2補題
- 2013藍橋杯題解c組C++C++
- [Java] 藍橋杯ADV-185 演算法提高 五次方數Java演算法
- 藍橋杯
- 2017藍橋杯省賽第十題:k倍區間
- 問題 1462: [藍橋杯][基礎練習VIP]Huffuman樹
- 藍橋杯-合併數列