HNUCM 1314 完美序列 二維DP

2021-08-28 08:13:43 字數 961 閱讀 8209

已知乙個長度為l的序列:b1,b2,b3,…,bl (1<=b1<=b2<=b3<=…<=bl<=n)。若這個序列滿足每個元素是它後續元素的因子,換句話說就是對於任意的i (2<=i<=l)都滿足bi%bi-1=0 (其中「%」代表求餘),則稱這個序列是完美的。你的任務是對於給定的n和l,計算出一共有多少序列是完美序列。由於答案很大,所有輸出答案對1000000007取餘後的結果。

輸入的第一行為乙個正整數t (t<=1000),代表一共有t組測試資料。

每組測試資料報含兩個正整數n,l (1<=n, l<=2000),分別代表序列中元素大小的最大值和序列的長度。

對於每組測試資料,輸出一行包含乙個整數,代表答案對1000000007取餘後的結果。

3 26 4

2 1

思路:二維dp[i][j],i表示序列的長度,j表示序列最後乙個數的值

首先打表:

i到maxn所有的dp[1][i]賦初始值為1

接著三個for迴圈,i,j,k,分別代表序列長度,序列最後乙個數的值,滿足ai%ai-1=0序列需要的值(k+=j)

狀態轉移方程:dp[i][k]=(d[i-1][j]%mod+dp[i][k]%mod)%mod

最後結果把從1到最大值val,長度為len的dp[len][i]方案數累加即可

#include#include#include#include#include#include#include#include#include#include#define max 0x3f3f3f3f

#define min 0xc0c0c0c0

#define mst(a) memset(a,0,sizeof(a))

#define f(i,a,b) for(int i=a;i>t;

while(t--)

cout<}

return 0;

}

完美序列(二維dp)

題目描述 已知乙個長度為l的序列 b1,b2,b3,bl 1 b1 b2 b3 bl n 若這個序列滿足每個元素是它後續元素的因子,換句話說就是對於任意的i 2 i l 都滿足bi bi 1 0 其中 代表求餘 則稱這個序列是完美的。你的任務是對於給定的n和l,計算出一共有多少序列是完美序列。由於答...

最長上公升子串行 滑雪(二維)

michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長底滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1 2 3 4 5 16 17 ...

二維陣列中的最長遞減子串行

給定乙個如下的二維陣列a 1 3 5 7 4 2 1 8 6 5 4 0 1 2 6 求其中的最長遞減子串行 7,5,3,1,0,1,2,長度為7。子串行只能朝向上下左右四個方向,不能朝對角線方向。思路 該題一看感覺可以用動態規劃做,但是下標不確定從 開始算起,因為有上下左右四個方向,沒有辦法順序計...