牛牛與陣列(DP)

2021-09-26 05:59:45 字數 991 閱讀 3637

牛牛喜歡這樣的陣列:

1:長度為n

2:每乙個數都在1到k之間

3:對於任意連續的兩個數a,b,a<=b 與(a % b != 0) 兩個條件至少成立乙個

請問一共有多少滿足條件的陣列,對1e9+7取模

輸入兩個整數n,k

1 ≤ n ≤ 10

1 ≤ k ≤ 100000

輸出乙個整數
輸入

2 2輸出3輸入

9 1輸出1輸入

3 3輸出

15輸入

2 1234

輸出1515011

思路:不能根據所影響這一步的加和來解決這個問題,會時間超限。 dp[i][j]代表陣列長度為i時以j結尾的有多少種方法(1<=j<=k),當j=0時是陣列長度為i時總的方法數,對於需要滿足的條件a<=b || a % b != 0成立的太多了,我們可以找他的對立面a>b&&a%b==0,然後用總方法數減去不滿足條件的就是該位置的結果。

ac**:

#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define inf 0x3f3f3f3f

const int mod=1e9+7;

const int m=1e5 + 10;

ll dp[11][100100];

int main()

for (int i = 2; i <= n;i++)

for(int j=1;j<=k;j++)

dp[i][j]=(dp[i-1][0]-sum)%mod;

dp[i][0]=(dp[i][0]+dp[i][j])%mod;}}

cout << dp[n][0]%mod << endl;

return 0;

}

牛牛與陣列DP

思路 如果正著計算容易出現遺漏,所以我們只用找 a b a是b的倍數 的方案數,然後用總數減去這個方案數就是答案。思考用dp來解決這個問題,設dp i j 表示長度為 i 的陣列第 i 位為 j 的符合要求的陣列方案數。1 i n 1 j k 邏輯 n個數的陣列,先初始化dp 1 i 1。三重迴圈,...

牛牛與陣列(DP)

牛牛喜歡這樣的陣列 1 長度為n 2 每乙個數都在1到k之間 3 對於任意連續的兩個數a,b,a b 與 a b 0 兩個條件至少成立乙個 請問一共有多少滿足條件的陣列,對1e9 7取模 輸入兩個整數n,k 1 n 10 1 k 100000輸出乙個整數 dp i j 表示前i個序列,第i個位j的時...

dp 牛牛與陣列

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 牛牛喜歡這樣的陣列 1 長度為n 2 每乙個數都在1到k之間 3 對於任意連續的兩個數a,b,a b 與 a b 0 兩個條件至少成立乙個 請問一共有多少滿足條件的陣列...