題解 AcWing271 楊老師的照相排列

2022-07-02 11:36:10 字數 849 閱讀 9474

題面

經典的線性 \(\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 ...