Codeforces 914H Ember and Storm's Tree Game 【DP】*
Codeforces 914H Ember and Storm’s Tree Game
ORZ佬
果然出了一套自闭题
这题让你算出第一个人有必胜策略的方案数
然后我们就发现必胜的条件就是树上的每条路径都是单调或者单峰的
所以我们考虑DP一个每条路径都是单调或单峰的树出来
所以考虑DPf[i][j]" role="presentation" style="position: relative;">f[i][j]f[i][j]表示大小是i的子树根节点的度数是j,并且满足任何一个点都比他的父亲大
那么我们发现这样的情况并不全,但是又可以发现满足任何一个点比他的父亲小和大是等价的
所以我们可以开开心心地开始DP
但是问题又来了
我们在统计一个子树的贡献的时候常常会把编号算重,所以我们可以每次DP累加贡献的时候只考虑编号次小的那个点所在的子树
然后我们可以很方便地累加贡献了,还需要加上组合数,又因为我们发现当前累加的子树根节点的度数大小无关紧要,所以我们直接累加前缀和,用s表示
f(i,k+1)=∑f(i−j,k)×(∑l=1d−1f(j,l))×(i−2j−1)" role="presentation" style="position: relative;">f(i,k+1)=∑f(i−j,k)×(∑d−1l=1f(j,l))×(i−2j−1)f(i,k+1)=∑f(i−j,k)×(∑l=1d−1f(j,l))×(i−2j−1)
但是我们又发现,一棵合法的树有可能有多个合法的根被我们统计,但是我们可以发现所有合法的根一定是一条链,然后我们考虑只在链的一端统计答案就可以了
#include<bits/stdc++.h>
using namespace std;
#define fu(a,b,c) for(int a=b;a<=c;a++)
#define fd(a,b,c) for(int a=b;a>=c;a--)
int read(){
int ans=0,w=1;char c=getchar();
while(!isdigit(c)&&c!='-')c=getchar();
if(c=='-')w=-1,c=getchar();
while(isdigit(c))ans=(ans<<1)+(ans<<3)+c-'0',c=getchar();
return ans*w;
}
#define N 210
#define LL long long
int n,d;
LL ans=0,Mod;
LL c[N][N],f[N][N],s[N][N];
void init(){
fu(i,0,n){
c[i][0]=1;
fu(j,1,i)c[i][j]=(c[i-1][j]+c[i-1][j-1])%Mod;
}
fu(i,0,d)s[1][i]=1;
f[1][0]=1;
}
int main(){
n=read();d=read();Mod=read();
init();
fu(i,2,n){
fu(j,1,i-1)
fu(k,0,d-1)
f[i][k+1]=(s[j][d-1]*c[i-2][j-1]%Mod*f[i-j][k]%Mod+f[i][k+1])%Mod;
fu(j,1,d)s[i][j]=(s[i][j-1]+f[i][j])%Mod;
}
fu(i,0,n-1)
fu(j,0,d)
fu(k,0,d-j)if(k!=1)
ans=(ans+f[i+1][j]*f[n-i][k]%Mod)%Mod;
ans=2ll*n*(n-1)*ans%Mod;
printf("%lld",ans);
return 0;
}
Codeforces 914H Ember and Storm's Tree Game 【DP】*的更多相关文章
- Codeforces gym 101291 M (最长交替子序列)【DP】
<题目链接> 题目大意:给你一段序列,要求你求出该序列的最长交替子序列,所谓最长交替子序列就是,这段序列的相邻三项必须是先递增再递减或者先递减再递增这样交替下去. 解题分析: 这与一道dp ...
- 【CodeForces】914 H. Ember and Storm's Tree Game 动态规划+排列组合
[题目]H. Ember and Storm's Tree Game [题意]Zsnuoの博客 [算法]动态规划+排列组合 [题解]题目本身其实并不难,但是大量干扰因素让题目显得很神秘. 参考:Zsn ...
- [CodeForces - 1225E]Rock Is Push 【dp】【前缀和】
[CodeForces - 1225E]Rock Is Push [dp][前缀和] 标签:题解 codeforces题解 dp 前缀和 题目描述 Time limit 2000 ms Memory ...
- 【codeforces 914H】Ember and Storm's Tree Game
原题链接 Description Ember和Storm正在玩游戏.首先,Ember构造一棵n个节点且每个节点度数不超过d的带节点编号的树T.然后,Storm选择两个不同的节点u和v,并写下从u到v路 ...
- Codeforces 804D Expected diameter of a tree(树形DP+期望)
[题目链接] http://codeforces.com/contest/804/problem/D [题目大意] 给你一个森林,每次询问给出u,v, 从u所在连通块中随机选出一个点与v所在连通块中随 ...
- 【dp】codeforces C. Vladik and Memorable Trip
http://codeforces.com/contest/811/problem/C [题意] 给定一个自然数序列,在这个序列中找出几个不相交段,使得每个段的异或值之和相加最大. 段的异或值这样定义 ...
- Codeforces 658C Bear and Forgotten Tree 3【构造】
题目链接: http://codeforces.com/contest/658/problem/C 题意: 给定结点数,树的直径(两点的最长距离),树的高度(1号结点距离其他结点的最长距离),写出树边 ...
- Storm配置项详解【转】
Storm配置项详解 ——阿里数据平台技术博客:storm配置项详解 什么是Storm? Storm是twitter开源的一套实时数据处理框架,基于该框架你可以通过简单的编程来实现对数据流的实时处理变 ...
- Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】
Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...
随机推荐
- C#:手把手教你用C#打包应用程序(安装程序卸载程序)
摘要:本文介绍在C#中手把手教你用C#打包应用程序(安装程序卸载程序) 1:新建安装部署项目 打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点 ...
- Linux安装keepalived
1.下载安装ipvs安装包,进行解压 http://www.keepalived.org/software/ 2.创建安装路径连接 安装环境: yum -y install openssl-devel ...
- 关于http请求ContentType:application/x-www-form-urlencoded
在又一次http请求过程中,模拟post请求提交form表单数据一直提示部分参数为空,后面检查发现是缺少ContentType:application/x-www-form-urlencoded的原因 ...
- org.springframework.stereotype.Service和com.alibaba.dubbo.config.annotation.Service两种service的区别
这两个Service,都可以在service类头上使用@Service的注解,于是我就写错了,查了半天才发现.他们的区别大概是这个样子的: org.springframework.stereotype ...
- day20 project+查看新闻列表 + 点赞 + 图片验证码 + 评论和多级评论 + 后台管理 + webSocket + kindEditor
Day20回顾: 1. 请求生命周期 2. 中间件 md = [ "file_path.classname" ] process_request[可有可无] process_res ...
- JS种正则表达式的基础用法
基础语法 元字符 常用元字符 含义 . 匹配除换行符以外的任意字符 \w 匹配字母数字或下划线 \W 匹配不是字母.数字.下划线的字符 \d 匹配数字,相当于[0-9] \D 匹配不是数字的字符 \s ...
- python 重新修炼之路
第一篇 基础篇 1.1 打造万能的开发环境-conda 1.2 python的代码规范与vscode配置 1.3 变量 与 关键字 1.4 数据类型 1.4.1 数字 ...
- laravel中Crypt加密方法
使用Crypt::encrypt对数据进行加密,要引入 use Illuminate\Support\Facades\Crypt;; 对使用Crypt::encrypt加密的数据进行解密的方法时:C ...
- 从centos6升级到centos7步骤
1. 备份 2. 安装依赖列表 yum源文件/etc/yum.repos.d/upgrade.repo,内容为 [upgrade] name=upgrade baseurl=http://dev.ce ...
- 【河南省第十一届ACM程序设计大赛-A】计划日
已知李明在YYYY年MM月DD日星期W订了学习计划,现在想看看李明N天后的完成情况和个人总结,你能告诉我那天的日期和星期几吗? 输入 第一行: T 表示以下有T组测试数据 ...