題面
經典的線性 \(\text\) 。
設 \(dp_\) 表示第 \(1\) 排有 \(a\) 個人,第 \(2\) 排有 \(b\) 個人, 第 \(3\) 排有 \(c\) 個人, 第 \(4\) 排有 \(d\) 個人, 第 \(5\) 排有 \(e\) 個人的方案數。
初始化 \(dp_=1\) 。
可以發現乙個性質:前排的人數一定比後排的人數多。
轉移可以參考**。
#include #define debug fprintf(stderr, "passing [%s] line %d\n", __function__, __line__)
#define itn int
#define gi gi
using namespace std;
typedef long long ll;
typedef pair pii;
typedef pair piii;
inline int gi()
while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return f * x;
}const int maxn = 33;
int n, m, k, s[maxn];
ll dp[maxn][maxn][maxn][maxn][maxn];
int main()}}
}} //輸出結果
printf("%lld\n", dp[s[1]][s[2]][s[3]][s[4]][s[5]]);
} return 0;
}
楊老師的照相排列
dp的難點在於狀態的確定和轉移方程的推導.在本題中,我們可以從頭列舉,去觀察歸納,找到本題的最優子結構.假設有 k 1,a 3,2,1 對於第乙個數字1,它的數字一定是固定的 只能在最左上角 對於第二個數字,它可以位於1的右邊,也可以在1的下邊 通過列舉擺放的情況後,我們可以發現 第 i 行的擺放數...
楊老師的照相排列(線性dp)
題意 有n個人,身高分別是1,2,3,4 n,將這n個人排隊,要求從前 上面 往後 下面 身高增,從左往右身高也遞增。要求組成k排,每排需要的人數給出,問你有多少種排列的方法。比如n 6,k 3,n1 3,n2 2,n3 1 那麼 123 456就是一種合法排列。資料範圍 1 k 5,學生總人數不超...
牛客題 楊老師的遊戲 (暴力列舉)
新疆大學acm icpc程式設計競賽五月月賽 同步賽 b 楊老師的遊戲 楊老師給同學們玩個遊戲,要求使用乘法和減法來表示乙個數,他給大家9張卡片,然後報出乙個數字,要求大家用表示式的形式來表示出這個數 100 可以表示為這樣的形式 100 129 67 8543 還可以表示為 100 13 489 ...