zoukankan      html  css  js  c++  java
  • 九度OJ 1547 出入栈 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1547

    题目描述:

    给定一个初始为空的栈,和n个操作组成的操作序列,每个操作只可能是出栈或者入栈。
    要求在操作序列的执行过程中不会出现非法的操作,即不会在空栈时执行出栈操作,同时保证当操作序列完成后,栈恰好为一个空栈。
    求符合条件的操作序列种类。
    例如,4个操作组成的操作序列符合条件的如下:
    入栈,出栈,入栈,出栈
    入栈,入栈,出栈,出栈
    共2种。

    输入:

    输入包含多组测试用例,每组测试用例仅包含一个整数n(1<=n<=1000)。

    输出:

    输出仅一个整数,表示符合条件的序列总数,为了防止总数过多超出int的范围,结果对1000000007取模(mod 1000000007)。

    样例输入:
    2
    4
    10
    样例输出:
    1
    2
    42
    来源:
    2014年王道论坛研究生机试练习赛(一)

    状态dp[i][j](i >= j)表示入栈i次出栈j次的种类数

    状态转移方程:dp[i][j] = dp[i-1][j] + dp[i][j-1]

    #include <stdio.h>
    #include <string.h>
     
    int dp[501][501];
     
    void MaxNum(){
        int i, j;
        memset(dp, 0, sizeof(dp));
        dp[0][0] = 0;
        for (i = 1; i <= 500; ++i){
            dp[i][0] = 1;
        }
        for (i = 1; i <= 500; ++i){
            for (j = 1; j <= i; ++j){
                dp[i][j] = (dp[i-1][j] + dp[i][j-1]) % 1000000007;
            }
        }
    }
     
    int main(void){
        int n;
     
        MaxNum();
        while (scanf("%d", &n) != EOF){
            if (n & 1)
                printf("0
    ");
            else
                printf("%d
    ", dp[n>>1][n>>1]);
        }
     
        return 0;
    }


  • 相关阅读:
    Filebeat
    kafka 分区 spark excutor task rdd
    Java 方法重写方法重载
    Spark union
    Storm
    pbuilder编译构建工具分析
    TCP的拥塞控制 (四)
    TCP的拥塞控制 (三)
    TCP的拥塞控制 (二)
    TCP的拥塞控制 (一)
  • 原文地址:https://www.cnblogs.com/liushaobo/p/4373758.html
Copyright © 2011-2022 走看看