NOIP模擬 table 動態規劃

2022-06-01 08:21:07 字數 1400 閱讀 1605

source:noip2016-rzz-2 t2

給定乙個 n×m 的矩陣,行列均從 1 開始標號。

乙個矩陣被認為是穩定的,當且僅當對於任意的 2≤i≤n,第 i 行的數的和不小於第 i−1 行的數的和,且最後一行的數的和小於等於 m ,並且要求矩陣中所有的元素都是非負的。

求所有 n×m 的穩定矩陣的方案數,答案對 109 取模。

第一行乙個整數 t ,表示資料組數。

每組資料一行兩個整數 n,m 。

輸出 t 行,每行乙個整數,表示方案數。

1 1 

2 2 

2 3

25 273

【資料規模與約定】

對於 30% 的資料,n,m≤3。

對於 60% 的資料,n,m≤50。

對於 100% 的資料,1≤n,m≤2000;1≤t≤10。

題目意思顯而易見,求兩次dp:

第一次,求出$c(i, j)$:

對於這一次dp,其實就是求組合數,可以使用遞推公式: $$c(i, j) = c(i - 1, j - 1) + c(i - 1, j)$$

那麼我們在求將$i$個數和為$j$的方案數時, 實際就是將$j$個1分成$i$份,可以看作從$j + i - 1$個數中選出$i - 1$個數(作為柵欄將1隔開)

其實就是求$c(j + i - 1, i - 1)$

第二次,求出$dp(i, j)$表示第$i$行和小於等於$j$的方案數。

這一次dp採用字首和累加記錄。對於當前$dp(i, j)$, 先加上$dp(i, j - 1)$(累加,這樣算出來的才是小於等於j的方案數),

然後再加上$c(j + m - 1,m - 1) × dp(i - 1, j)$(上一行的和小於等於當前行的和, 則當前行的和為$j$時(方案數$c(j + m - 1,m - 1)$) ×上一行的和小於等於$j$(方案數$dp(i - 1, j)$).

不要忘記取模(乘法爆int 先乘上 1ll )。

#include#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int n = 2005, mod =1e9;

intn, m, t;

int cnt[n<<1][n<<1

], s[n][n];

inline

void

init()

intmain()

}cout

}return0;

}

view code

NOIP模擬 動態規劃 permut

題目描述 求由 1 到 n 一共 n 個數字組成的所有排列中,逆序對個數為 k 的有多少個。輸入格式 第一行為乙個整數 t 為資料組數。以下 t 行,每行兩個整數 n,k,意義如題目所述。輸出格式 對每組資料輸出答案對 10000 取模後的結果。樣例輸入 1 4 1 樣例輸出 3資料規模 對於 30...

NOIP模擬 上課 動態規劃

問題描述學校裡有許多節課,第 i 節課從 ti 時刻開始上,上課的時間為 si,如果上了第 i 節課,你的做題能力將變成 ci 是能力的數值,不是能力的增長值 有 n 類作業,每類作業數量不限,每類作業完成乙份所需要的時間為 ai,做某類作業需要的做題能力達到 qi qi 才能完成。在每個時刻你可以...

NOIP模擬 記憶化搜尋 動態規劃 遊戲

題目描述 題目大意 有n個物品排成一排,從左往右第i個價值為a i 有兩個人從左往右輪流取物品。第乙個人可以拿一或兩個物品。如果前乙個人拿了k個,下乙個人只能拿k或k 1個。如果剩下的物品不夠拿,就結束。問如果大家都採取最優策略,那麼先手拿的物品的價值最多能比後手多多少。1 n 20000 樣例輸入...