牛牛與陣列DP

2021-09-25 16:19:49 字數 804 閱讀 2590

思路:如果正著計算容易出現遺漏,所以我們只用找 「a>b&&a是b的倍數」的方案數,然後用總數減去這個方案數就是答案。

思考用dp來解決這個問題,設dp[i][j]表示長度為 i 的陣列第 i 位為 j 的符合要求的陣列方案數。(1<=i<=n  1<=j<=k)

**邏輯:n個數的陣列,先初始化dp[1][i] = 1。三重迴圈,通過優化計算得時間複雜度為o(n^2 logn),即可以計算出

t(n) = 5*10^6。在迴圈中先計算長度為 i 時所有可能的陣列個數(不考慮題目的條件),用sum記錄。然後計算確定 j 時的(a>b && a是b的倍數)的方案數,用dum記錄。然後用sum-dum,計算出dp[i][j]。

(計算中別忘了取模)

#includeusing namespace std;

const int maxn = 3e6+10;

const int modd = 1e9+7;

typedef long long ll;

const int inf = 0x3f3f3f3f;

int dp[20][100000];

int main()

int sum = 0,dum = 0;

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

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

dp[i][j] = (sum-dum)%modd;}}

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

cout

}

牛牛與陣列(DP)

牛牛喜歡這樣的陣列 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 ...

牛牛與陣列(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 兩個條件至少成立乙個 請問一共有多少滿足條件的陣列...