码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 1152D(dp)

时间:2019-05-07 01:37:56      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:max   inline   开始   clu   scanf   span   scan   平衡   括号   

要点

  • 寻找最多边的匹配的结论:贪心地从叶子开始找,最后答案都是奇数层下边的那条边。
  • \(dp[i][j]\)表示当前长度为\(i\),平衡度为\(j\),平衡度为(数量减去)数量。
  • 增加左右括号转移,并将奇数层合法的加到ans中。
#include <cstdio>

const int maxn = 1005, mod = 1e9 + 7;
int n;
long long dp[maxn << 1][maxn << 1], ans;

int main() {
    scanf("%d", &n);
    dp[0][0] = 1;
    for (int i = 0; i < 2 * n; i++) {
        for (int j = 0; j <= i; j++) {
            dp[i + 1][j + 1] = (dp[i + 1][j + 1] + dp[i][j]) % mod;
            if (j)  dp[i + 1][j - 1] = (dp[i + 1][j - 1] + dp[i][j]) % mod;
        }
        if (i % 2) {
            for (int j = 0; j <= i && i + j <= 2 * n; j++)
                ans = (ans + dp[i][j]) % mod;
        }
    }
    return !printf("%lld\n", ans);
}

Codeforces 1152D(dp)

标签:max   inline   开始   clu   scanf   span   scan   平衡   括号   

原文地址:https://www.cnblogs.com/AlphaWA/p/10823103.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!