藍橋杯 演算法訓練 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數列
- 藍橋杯 演算法訓練 操作格子 (線段樹)演算法
- 藍橋杯練習試題程式碼及講解
- 藍橋杯試題 基礎練習 特殊迴文數
- 藍橋杯訓練--母牛的故事(很清晰的思路)
- 藍橋杯練習系統題目集
- 藍橋杯:基礎練習 查詢整數
- 藍橋杯 【基礎練習】 特殊迴文數
- 藍橋杯 演算法提高 P0102(Java解題)演算法Java
- 藍橋杯 小朋友排隊 (歸併排序 逆序數 好題)排序
- 藍橋杯之特殊迴文數JAVAJava
- 藍橋杯演算法提高——字串匹配(Java)演算法字串匹配Java
- Java藍橋杯14年第五題Java
- Java實現 藍橋杯 演算法提高 八數碼(BFS)Java演算法
- [藍橋杯][演算法提高VIP]大數加法演算法
- 藍橋杯-座次問題
- 閒聊藍橋杯JAVA - 生成迴文數Java
- 【每週例題】藍橋杯 C++ 多數C++
- 問題 1462: [藍橋杯][基礎練習VIP]Huffuman樹
- 2013藍橋杯題解c++A組C++
- 藍橋杯 排序排序
- 2024SMU藍橋訓練2補題
- 藍橋杯 分巧克力(Java)Java
- 藍橋杯題庫 BASIC-16 分解質因數
- 藍橋杯例題-快速分揀
- 藍橋杯基礎練習-找出唯一成對的數
- C++實現 藍橋杯 k倍區間C++
- 發現一個可以練習藍橋杯VIP題目的網址
- [Java] 藍橋杯ADV-185 演算法提高 五次方數Java演算法
- 藍橋杯 演算法提高 字串壓縮演算法字串