日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【蓝桥杯官网试题 - 算法训练 】K好数(线性dp与优化)

發布時間:2023/12/10 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【蓝桥杯官网试题 - 算法训练 】K好数(线性dp与优化) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題干:

問題描述

如果一個自然數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。

解題報告:

? ?這題數據量比較小,可以隨便搞(我寫了個O(n*k*k)的),其實注意到當前狀態只和上一層的兩個值有關系,所以復雜度可以優化到O(n*k)。(%syt大佬)

? ?不過如果n和k都是1e6,這題還可以做嗎?

AC代碼:

#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair using namespace std; const int MAX = 2e2 + 5; const ll mod = 1000000007; ll dp[MAX][MAX]; int main() {int k,n;cin>>k>>n;for(int i = 1; i<k; i++) dp[1][i]=1;for(int i = 2; i<=n; i++) {for(int j = 0; j<k; j++) {for(int l = 0; l<k; l++) {if(abs(j-l) == 1) continue;dp[i][j] = (dp[i][j] + dp[i-1][l])%mod;}}}ll ans = 0;for(int i = 0; i<k; i++) {ans = (ans + dp[n][i])%mod;}printf("%lld\n",ans);return 0 ;}

優化:

總結

以上是生活随笔為你收集整理的【蓝桥杯官网试题 - 算法训练 】K好数(线性dp与优化)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。