• 洛谷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

  • 相关阅读:
    人工智能数学基础笔记(上)
    人工智能简介
    十三,十四 基金收益,税收与基金国际化
    资产配置模型之-BL模型
    十二 基金估值,费用与会计核算
    十一 基金的投资交易与结算
    十 基金业绩评价
    九 投资风险管理
    浙工商oj ___飞龙的飞行方程
    hd1004解题思路
  • 原文地址:https://www.cnblogs.com/conprour/p/14291341.html
Copyright © 2020-2023  润新知