時間限制: 1 s
空間限制: 256000 kb
題目等級 : ** gold
題解已知1~n的排列p的lis(最長上公升子串行)不超過2,求可能的p的個數。答案取模10^9+7。
輸入描述 input description
一行乙個整數n。
輸出描述 output description
輸出一行乙個整數,描述可能的排列p的個數mod1000000007的結果。
樣例輸入 sample input
樣例輸出 sample output
資料範圍及提示 data size & hint
測試點編號 資料範圍
1,2 n≤10
3,4 n≤20
5,6,7,8,9,10 n≤1000
ac**:
/*解析:
從小到大乙個乙個往數列裡加數字,第一次加1,只有一種加法,第二次加2,可以加在1前或後,2種方法.....
最長上公升子串行要麼是1要麼是2,是1的話只有一種情況,下降序列
f[i][j]表示已經加了前i個數字,最後乙個數字(第i個數)的位置是j,滿足題目要求的方案數,
如果i不是加在第乙個位置是,i+1必須在i的前面,
否則你會形成乙個3的上公升子串行。
所以當j不等於1時,你只能把i+1加到i前面。
如果j==1,可以加到第1,2,3個位置,第四個位置就無法確定了,
所以我們改變策略。
f[i][j]表示前i個數字已經放好且j表示i沒有放在第乙個位置放在**的方案數。
*/#include
using
namespace
std;
const
int n=1e3+10
;const
int mod=1000000007
;int n,f[n][n]=;
intmain()
}printf("%d
",f[n][n]);
return0;
}
江哥的DP題(A)
題目描述 給定乙個長度為n的序列a a1 a2 a3 an 取k個互不相同的元素,使得 1 兩兩元素互不相鄰 2 元素之和最大。輸入描述 第一行輸入兩個正整數n k 第二行輸入n個整數,表示序列a中的元素。輸出描述 輸出乙個整數,表示最大和。樣例輸入 樣例1 7 33 5 7 1 9 10 7 樣例...
CODE VS 江哥的DP題a
原題 先來一波江哥的解題報告殺 這種方法十分的高深莫測,所以我們換乙個容易理解的 f i,j 表示前i個選j個,且第i個必選,那麼就是江哥的轉移方程 p.s 但是不會字首和優化!顯然,這樣的方法只能獲得30分,資料十分的坑,那麼優化如下 f i,j,0 表示前i個裡面選j個且第i個不選 f i,j,...
江哥的DP題(F)
題目描述 有乙個n m的棋盤,每個格仔都有乙個權值,規定路徑必須滿足下列條件 1 從左上角出發,於右下角結束 2 不經過重複的格仔 3 每一步都不會向左走 現詢問路徑經過的格仔的權值和最小能夠為多少。輸入描述 第一行輸入兩個整數n m 接下來n行,每行輸入m個整數,表示每個格仔的權值。輸出描述 輸出...