藍橋杯 演算法訓練 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);
}
}
相關文章
- 藍橋杯 演算法訓練 區間k大數查詢 (Java解題)演算法Java
- 藍橋杯 (java)演算法訓練 數對Java演算法
- 藍橋杯—演算法訓練演算法
- 藍橋杯--演算法訓練演算法
- [藍橋杯][演算法訓練VIP]方格取數演算法
- [Java] 藍橋杯ALGO-117 演算法訓練 友好數JavaGo演算法
- 藍橋杯 演算法訓練 素因子去重(Java)演算法Java
- 演算法訓練 字首表示式 (藍橋杯)演算法
- 藍橋杯:入門訓練 Fibonacci數列
- 藍橋杯 演算法訓練 操作格子 (線段樹)演算法
- 藍橋杯練習試題程式碼及講解
- 藍橋杯試題 基礎練習 特殊迴文數
- 藍橋杯訓練--母牛的故事(很清晰的思路)
- 藍橋杯練習系統題目集
- 藍橋杯-k倍區間
- 藍橋杯 演算法提高 P0102(Java解題)演算法Java
- 藍橋杯真題
- 藍橋杯:基礎練習 查詢整數
- 藍橋杯 【基礎練習】 特殊迴文數
- 藍橋杯 小朋友排隊 (歸併排序 逆序數 好題)排序
- 藍橋杯之特殊迴文數JAVAJava
- 藍橋杯演算法提高——字串匹配(Java)演算法字串匹配Java
- Java藍橋杯14年第五題Java
- Java實現 藍橋杯 演算法提高 八數碼(BFS)Java演算法
- 藍橋杯-帶分數
- [藍橋杯][演算法提高VIP]大數加法演算法
- 閒聊藍橋杯JAVA - 生成迴文數Java
- 藍橋杯-座次問題
- 藍橋杯-日期問題
- 藍橋杯-波動數列
- 藍橋杯-合併數列
- 【每週例題】藍橋杯 C++ 多數C++
- 2013藍橋杯題解c++A組C++
- 【題解】爬山 藍橋杯2024省B
- 藍橋杯-買不到的數目
- 藍橋杯-連號區間數
- 藍橋杯 排序排序
- 問題 1462: [藍橋杯][基礎練習VIP]Huffuman樹