洛谷 p1044 dp 栈

论坛 期权论坛 脚本     
已经匿名di用户   2022-7-2 21:58   3229   0
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int i, j;
    int n;
    cin >> n;
    long long c[20][20];//c[i][j]即出栈i个,进栈j个

    for (j = 0; j <= n; j++)
        c[0][j] = 1;
    for (i = 1; i <= n; i++)
        for (j = i; j <= n; j++)
        {
            if (i == j) c[i][j] = c[i - 1][j];
            else c[i][j] = c[i - 1][j] + c[i][j - 1];
        }
    printf("%d\n", c[n][n]);
    return 0;
}


/*
分析:运用dp的思想
①:状态:c[i][j]表示有i个出栈的,有j个进栈的  
②:再找出状态边界,转移公式。
        当出栈的个数为0时,只有唯一的结果,就是逐个出栈形成的序列
        当出栈等于进栈个数的时候,就是栈为空,它的子状态必然是唯一一种,栈里只有一个数,而出栈了i-1个
        当出栈不等于进栈时,子状态有两种,其一为进栈少一个,出栈不变,另一个则是进栈不少,但出栈少一个

*/

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP