【题解】序列
題目描述
一個(gè)長度為k的整數(shù)序列b1,b2,...,bk(1≤b1≤b2≤...≤bk≤N)稱為“好序列”當(dāng)且僅當(dāng)后一個(gè)數(shù)是前一個(gè)數(shù)的倍數(shù),即bi+1是bi的倍數(shù)對(duì)任意的i(1≤i≤k-1)成立。
給定N和k,請(qǐng)算出有多少個(gè)長度為k的“好序列”,答案對(duì)1000000007取模。
?
輸入格式
一行,包含2個(gè)用空格隔開的整數(shù)N和k。
?
輸出格式
一行,包含一個(gè)整數(shù),表示長度為k的“好序列”的個(gè)數(shù)對(duì)1000000007取模后的結(jié)果。
?
輸入樣例
3 2
?
輸出樣例
5
?
數(shù)據(jù)規(guī)模
對(duì)于40%的數(shù)據(jù),1≤N≤30,1≤k≤10。
對(duì)于100%的數(shù)據(jù),1≤N≤2000,1≤k≤2000。
?
題解
我們枚舉因子來傳遞狀態(tài)給倍數(shù)即可,這里可以用滾動(dòng)數(shù)組優(yōu)化。
#include <iostream> #include <fstream>#define MAX_N 2001 #define MAX_M 2001#define MOD 1000000007using namespace std;int n, m; int dp[MAX_N]; int ans;int main() {cin >> n >> m;for(register int i = n; i; --i){dp[i] = 1;}for(register int i = 2; i <= m; ++i){for(register int j = n >> 1; j; --j){for(register int k = j << 1; k <= n; k += j){dp[k] += dp[j];if(dp[k] >= MOD) dp[k] -= MOD;}}}for(register int i = n; i; --i){ans += dp[i];if(ans >= MOD) ans -= MOD;}cout << ans;return 0; } 參考程序?
轉(zhuǎn)載于:https://www.cnblogs.com/kcn999/p/10805301.html
總結(jié)
- 上一篇: matlab模糊推理,模糊推理系统的ma
- 下一篇: 苹果设备型号代码 device mode