牛牛喜歡這樣的陣列:
1:長度為n
2:每乙個數都在1到k之間
3:對於任意連續的兩個數a,b,a<=b 與(a % b != 0) 兩個條件至少成立乙個
請問一共有多少滿足條件的陣列,對1e9+7取模
輸入兩個整數n,k1 ≤ 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 兩個條件至少成立乙個 請問一共有多少滿足條件的陣列...