日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【蓝桥杯官网试题 - 算法训练 】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与优化)的全部內容,希望文章能夠幫你解決所遇到的問題。

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