• D. Neko and Aki's Prank 记忆化搜索 优化 深度搜索


    D. Neko and Aki's Prank 记忆化搜索 优化 深度搜索

    题目大意:

    给你一个n,你是能够构造出一个长度为2*n的合法括号序列,然后把这些括号序列构造成一个字典树的形式,每一次操作你可以对一条边染色。染完色之后,和这条边相邻的边都不能被染色。

    然后问你这棵树最多能染多少条这样的边

    题解:

    这个难度不大,思路也很简单,但是难点在如果直接模拟这棵树,那么会TLE,然后我就搜了一下题解,发现可以使用 记忆化搜索 ,以前感觉记忆化搜索好难,但是写了这个题目之后感觉就是一个优化的方法。复杂度是 数组的大小

    但是这个题目我没有想到用记忆化搜索来优化这个 深搜。

    #include <bits/stdc++.h>
    #define inf 0x3f3f3f3f
    #define inf64 0x3f3f3f3f3f3f3f3f
    using namespace std;
    const int maxn = 3e3+10;
    const int mod = 1e9+7;
    typedef long long ll;
    int n;
    ll dp[maxn][maxn];
    ll dfs(int x,int y,int dep){
    //    printf("x = %d y = %d dep = %d
    ",x,y,dep);
        if(dp[dep][x]!=-1) return dp[dep][x];
        ll ans = 0;
        if(x<n) ans=dfs(x+1,y,dep+1);
        if(x>y&&y<n) ans=(ans+dfs(x,y+1,dep+1))%mod;
        if(dep&1) ans = (ans+1)%mod;
        dp[dep][x] = ans;
        return ans;
    }
    
    int main(){
        memset(dp,-1,sizeof(dp));
        scanf("%d",&n);
        printf("%lld
    ",dfs(0,0,0));
        return 0;
    }
    
  • 相关阅读:
    ASP.NET Page 那点事
    .Net项目分层与文件夹结构大全(最佳架子奖,吐槽奖,阴沟翻船奖揭晓)
    bash_profile和.bashrc的区别
    limits.conf生效问题
    有关snprintf返回值
    snprintf和strncpy对比
    Hadoop技术论坛
    Ubuntu系统微调
    interpreter和state模式的区别
    ANTLR实现的SQL解析器 OQL
  • 原文地址:https://www.cnblogs.com/EchoZQN/p/14353005.html
Copyright © 2020-2023  润新知