271. 杨老师的照相排列

Posted morrowwind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了271. 杨老师的照相排列相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[32][32][32][32][32],n,k[5];
//枚举最后一个编号最大的同学的位置,DP代表着abcde及这么多个人的总数,那么a-1bcde的总数也可求得
ll DP(int a,int b,int c,int d,int e){
    if(dp[a][b][c][d][e]!=0)
        return dp[a][b][c][d][e];
    ll s=0;
    if(a>0&&a>b) s+=DP(a-1,b,c,d,e);
    if(b>0&&b>c) s+=DP(a,b-1,c,d,e);
    if(c>0&&c>d) s+=DP(a,b,c-1,d,e);
    if(d>0&&d>e) s+=DP(a,b,c,d-1,e);
    if(e>0) s+=DP(a,b,c,d,e-1);
    dp[a][b][c][d][e]=s;
    return s;
}
int main() {
    while (cin>>n&&n!=0){
        memset(dp,0,sizeof(dp));
        memset(k,0,sizeof(k));
        dp[1][0][0][0][0]=1;
        for(int i=0;i<n;i++) cin>>k[i];
        cout<<DP(k[0],k[1],k[2],k[3],k[4])<<endl;
    }
    return 0;
}

 

以上是关于271. 杨老师的照相排列的主要内容,如果未能解决你的问题,请参考以下文章

271. 杨老师的照相排列

Acwing 271. 杨老师的照相排列

学不会的DP acwing 271. 杨老师的照相排列 [线性DP]

《算法竞赛进阶指南》 0x50 动态规划

从集合的角度思考DP问题

杨老师课堂_VBA学习教程之VBA中使用函数