zoukankan      html  css  js  c++  java
  • 洛谷P1044栈

    本题原本只想到写搜索....但是由于状态不会设定,连搜索也写的乱七八糟T^T

    看完题解后才发现还有记忆化搜索,递推(dp),数论卡特兰数等等.....

    主要问题在于状态设定:f[x][y]表示队列中x个数字,栈中y个数字的可能性数(记忆化搜索和dp的状态)

    记忆化搜索:

    #include<bits/stdc++.h>
    using namespace std;
    int n,f[25][25];
    long long dfs(int x,int y)//x表示队列中元素,y表示栈内元素
    {
    if(x==0) return 1;
    if(f[x][y]) return f[x][y];

    f[x][y]+=dfs(x-1,y+1);
    if(y>0) f[x][y]+=dfs(x,y-1);
    return f[x][y];
    }
    int main()
    {
    scanf("%d",&n);
    printf("%lld",dfs(n,0));
    return 0;
    }

    dp:

    #include<iostream>
    #include<cstdio>
    #include<cstring>//为了NOIP不用万能头文件
    using namespace std;
    int f[20][20];//数据就给到18,开个20算大方的
    int n;
    int main()
    {
        memset(f,0,sizeof(f));
        scanf("%d",&n);
        for(int i=0;i<=n;i++)
           f[i][0]=1;//边界一定要有
        for(int j=1;j<=n;j++)
           for(int i=0;i<=n;i++)
           //我们要推f[0][n],所以i要从零开始跑
            {
              if(i>=1) 
                f[i][j]=f[i-1][j]+f[i+1][j-1];
              if(i==0)//栈内没有东西
                f[i][j]=f[i+1][j-1];
            }
        printf("%d",f[0][n]);
        return 0;
    }

    链接:https://www.luogu.com.cn/problem/solution/P1044

  • 相关阅读:
    Python实现DES加密算法
    空循环,g++ O2优化
    java 高并发下超购问题解决
    原型模式
    Lambda速学
    观察者模式
    略读策略模式
    .net 字典的速学
    执行计划准备篇
    关于“策略模式”与“桥接模式”的问题
  • 原文地址:https://www.cnblogs.com/conprour/p/14291341.html
Copyright © 2011-2022 走看看