zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    ztz11的noip模拟赛T3:评分系统
    20181030NOIP模拟赛T3
    20181030NOIP模拟赛T2
    20181030noip模拟赛T1
    20181029NOIP模拟赛T3
    20181029NOIP模拟赛T2
    20181029noip模拟赛T1
    最优贸易(tarjan,spfa)
    [ZJOI2009]假期的宿舍(二分图匹配)
    上白泽慧音(tarjan,图的染色)
  • 原文地址:https://www.cnblogs.com/EchoZQN/p/14353005.html
Copyright © 2011-2022 走看看