蓝桥杯-K好数(java)
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯-K好数(java)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
算法訓(xùn)練 K好數(shù) 時(shí)間限制:1.0s 內(nèi)存限制:256.0MB錦囊1使用動(dòng)態(tài)規(guī)劃。問題描述如果一個(gè)自然數(shù)N的K進(jìn)制表示中任意的相鄰的兩位都不是相鄰的數(shù)字,那么我們就說這個(gè)數(shù)是K好數(shù)。求L位K進(jìn)制數(shù)中K好數(shù)的數(shù)目。例如K = 4,L = 2的時(shí)候,所有K好數(shù)為11、13、20、22、30、31、33 共7個(gè)。由于這個(gè)數(shù)目很大,請(qǐng)你輸出它對(duì)1000000007取模后的值。輸入格式輸入包含兩個(gè)正整數(shù),K和L。輸出格式輸出一個(gè)整數(shù),表示答案對(duì)1000000007取模后的值。樣例輸入4 2樣例輸出7數(shù)據(jù)規(guī)模與約定對(duì)于30%的數(shù)據(jù),KL <= 106;對(duì)于50%的數(shù)據(jù),K <= 16, L <= 10;對(duì)于100%的數(shù)據(jù),1 <= K,L <= 100。
import java.util.Scanner; public class sihaiK{ final static int MOD = 1000000007; public static void main(String[] args) { Scanner input = new Scanner(System.in); while (input.hasNext()) { int k = input.nextInt(); int l = input.nextInt(); int num = 0; int[][] nums = new int[l][k]; for (int i = 0; i < l; i++) for (int j = 0; j < k; j++) nums[i][j] = 0; for (int j = 0; j < k; j++) nums[0][j] = 1; for (int i = 1; i < l; i++) for (int j = 0; j < k; j++) for (int x = 0; x < k; x++) { if (x != j - 1 && x != j + 1) { nums[i][j] += nums[i - 1][x]; nums[i][j] %= MOD; } } for (int j = 1; j < k; j++) { num += nums[l - 1][j]; num %= MOD; } System.out.println(num); } } }
總結(jié)
以上是生活随笔為你收集整理的蓝桥杯-K好数(java)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯-区间k大数查询(java)
- 下一篇: 信息系统项目管理知识--项目成本管理