题目链接:

https://codeforces.com/contest/1152/problem/D

题意:

给出一个$n$,然后在匹配树上染色边,每个结点的所有相邻边只能被染色一次。

问,这颗树上最多染色多少边。

匹配树,就是深度为$2n$的树,每个节点都是一个字符串,只包含$(,)$,以长度为$2n$的合法匹配字符串作为叶子。每个节点的父亲是比自身长度小一的节点。

数据范围:

$1 \le n \le 1000$

分析:

在百度找了很久都没找到满意的题解,于是看了cf给的官方题解。虽然是全英文,但我居然看明白了!

实现起来不同,但是思路是一样的。

贪心的方法是,先染色叶子和叶子节点的父亲,并且去除它们,再染色叶子和叶子节点的父亲。

定义不平衡度,$($的数量减$)$的数量。

长度为x,不平衡度为y的子树染色方案数相同

例如这些节点$((()),()()(,(())($的子树,染色方案数相同

选择定义$dp[x][y]$,根节点长度为$x$,不平衡度为$y$,的子树的染色方案数

转移方程为

$ans=dp[0][0]$

ac代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e3+10;
const int maxm=1e7+10;
const int mod=1e9+7;
ll dp[2*maxn][2*maxn];
bool color[2*maxn][2*maxn];
int main()
{
int n;
scanf("%d",&n);
for(int i=2*n-1;i>=0;i--)
{
for(int j=0;j<=2*n-i;j++)
{
int flag=0;
if(j-1>=0)
{
dp[i][j]=(dp[i][j]+dp[i+1][j-1])%mod;
if(color[i+1][j-1]==0)flag=1;
}
if(j+1<=2*n-i-1)
{
dp[i][j]=(dp[i][j]+dp[i+1][j+1])%mod;
if(color[i+1][j+1]==0)flag=1;
}
if(flag)color[i][j]=1,dp[i][j]=(dp[i][j]+1)%mod;
}
}
printf("%d\n",dp[0][0]);
return 0;
}

  

codeforces#1152D. Neko and Aki's Prank(dp)的更多相关文章

  1. CodeForces 1152D Neko and Aki's Prank

    说明 Catalan(i) 表示卡特兰数的第 i 项. 题目链接:http://codeforces.com/problemset/problem/1152/C 题目大意 有 n 个左括号和 n 个右 ...

  2. Codeforces Round #260 (Div. 2)C. Boredom(dp)

    C. Boredom time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  3. Codeforces Round #658 (Div. 2) D. Unmerge(dp)

    题目链接:https://codeforces.com/contest/1382/problem/D 题意 给出一个大小为 $2n$ 的排列,判断能否找到两个长为 $n$ 的子序列,使得二者归并排序后 ...

  4. codeforces #260 DIV 2 C题Boredom(DP)

    题目地址:http://codeforces.com/contest/456/problem/C 脑残了. .DP仅仅DP到了n. . 应该DP到10w+的. . 代码例如以下: #include & ...

  5. codeforces#FF DIV2C题DZY Loves Sequences(DP)

    题目地址:http://codeforces.com/contest/447/problem/C C. DZY Loves Sequences time limit per test 1 second ...

  6. Codeforces Round #471 (Div. 2) F. Heaps(dp)

    题意 给定一棵以 \(1\) 号点为根的树.若满足以下条件,则认为节点 \(p\) 处有一个 \(k\) 叉高度为 \(m\) 的堆: 若 \(m = 1\) ,则 \(p\) 本身就是一个 \(k\ ...

  7. Codeforces 766C:Mahmoud and a Message(DP)

    题目链接:http://codeforces.com/problemset/problem/766/C 题意 有一个长度为n的字符串,第二行有26个数字,位置1~26对应为a~z的字母,数值表示该字母 ...

  8. Codeforces Problem - 38E - Let's Go Rolling!(DP)

    E. Let's Go Rolling! time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  9. Educational Codeforces Round 20 E - Roma and Poker(dp)

    传送门 题意 Roma在玩一个游戏,一共玩了n局,赢则bourle+1,输则bourle-1,Roma将会在以下情况中退出 1.他赢了k个bourle 2.他输了k个bourle 现在给出一个字符串 ...

随机推荐

  1. 试试自行封装AJAX和jQuery中的ajax封装的基本使用

    封装的套路: 1.写一个相对比较完善的用例2.写一个空函数,没有形参,将刚刚的用例直接作为函数的函数体3.根据使用过程中的需求抽象函数 代码记录如下: <script> function ...

  2. ResDrawableImgUtil【根据图片名称获取resID值或者Bitmap对象】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 根据图片名称获取项目的res/drawable-xxdhpi中相应资源的ID值以及bitmap值的封装类. 效果图 代码分析 根据图 ...

  3. Accept 与 Content-Type

    Accept 表示请求方希望的资源类型,或者能解析识别的类型 Content-Type 表示实际发送的资源类型 这里资源类型通过 MIME types 表示. Accept Accept 是浏览器发送 ...

  4. springcloud~Eureka实例搭建

    服务端 build.gradle配置 dependencies { compile('org.springframework.cloud:spring-cloud-starter-netflix-eu ...

  5. 全文检索-Elasticsearch (三) DSL

    DSL:elasticsearch查询语言elasticsearch对json 的语法有严格的要求,每个json串不能换行,同时一个json串和一个json串之间,必须有一个换行 DSL(介绍查询语言 ...

  6. Python编程从入门到实践笔记——异常和存储数据

    Python编程从入门到实践笔记——异常和存储数据 #coding=gbk #Python编程从入门到实践笔记——异常和存储数据 #10.3异常 #Python使用被称为异常的特殊对象来管理程序执行期 ...

  7. 字符型液晶屏模拟控件(En)

    A replica CLCD module control. Initiated on May 5, 2012 Updated on Feb 21, 2017 Copyright 2012-2017 ...

  8. C# 合并、拆分PPT幻灯片

    概述 通过合并.拆分的功能,将不同的文档中的幻灯片进行组合形成新的的文档,同时也可以将一个多页的PPT文档按页拆分成多个不同的文档.此功能也丰富了编程人员对PPT幻灯片的操作的选择.下面将分别从以下几 ...

  9. mysql命令行导入导出数据库

    导出:1.在命令行里,进入mysql安装根目录下的bin目录下比如:D:\Program Files\MySQL\MySQL Server 5.0\bin输入 mysqldump -uroot -p ...

  10. SpringBoot打包项目成war包,并部署到服务器的tomcat上

    最近遇到项目需要上线部署到服务器,需要讲自己的SpringBoot项目打包成war包,部署到tomcat上. 下面记录下打包部署的过程. (1) 将SpringBoot项目打包成war包, 一.修改打 ...