source:noip2016-rzz-2 t2
給定乙個 n×m 的矩陣,行列均從 1 開始標號。
乙個矩陣被認為是穩定的,當且僅當對於任意的 2≤i≤n,第 i 行的數的和不小於第 i−1 行的數的和,且最後一行的數的和小於等於 m ,並且要求矩陣中所有的元素都是非負的。
求所有 n×m 的穩定矩陣的方案數,答案對 109 取模。
第一行乙個整數 t ,表示資料組數。
每組資料一行兩個整數 n,m 。
輸出 t 行,每行乙個整數,表示方案數。
31 1
2 2
2 3
2【資料規模與約定】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#includeview code#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;
}
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 樣例輸入...