牛牛與陣列(DP)

2022-03-05 15:39:36 字數 1244 閱讀 9515

牛牛喜歡這樣的陣列:

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的時候的合法情況。

如果是三層暴力的話,肯定會t,我們可以記錄第二個for迴圈的總值,然後再去把不符合的情況給去掉。如果條件1,我們累加這個數前面的數就好了。

對於條件2,我們先預處理出來每個數的倍數,然後再減去不合法的情況就可以了。

ac**:

1 #include2

using

namespace

std;

3 # define ll long

long

4 # define inf 0x3f3f3f3f

5const

int maxn = 2e5+100;6

const

int n = 15;7

const

int mod = 1e9+7;8

ll dp[n][maxn];

9 vectorsto[maxn];

10int

main()

16for(int i=1;i<=k;i++)20}

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

24 ll tmp=0;25

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

32 dp[i][j]=(dp[i][j]+ans)%mod;33}

34}35 ll ans=0;36

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

39 printf("

%lld\n

",ans);

40return0;

41 }

牛牛與陣列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輸出乙個整數輸入 2 2輸出3輸入 9 1輸出1輸入 3 ...

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