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 ...
随机推荐
- Memcache课程
这套Memcache课程今天正式上线,http://www.yzmedu.com/course/53,总计6集,包括Memcache缓存技术和Memcache用户跨域技术,后面即将发布网上最全的微信小 ...
- CALL_AND_RETRY_LAST Allocation failed node打包报错
全局安装increase-memory-limit: npm install -g increase-memory-limit 进入工程目录,执行: increase-memory-limit
- POJ3768 Katu Puzzle
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- C和C#两种方式实现邮件的简单发送
内容为通过两种方式发送邮件--1.C语言发送邮件 2.C#发送邮件 一,C语言进行邮件的发送 C语言发送邮件的步骤的简单解析: 1.创建TCP连接 socket() 2.连接到邮箱服务器 ...
- Normalize.css与CSS reset区别
Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性.相比于传统的CSS reset,Normalize.css是一种现代的.为HTML5准备 ...
- pahlcon:cookies设置
非加密方式(简单,但不推荐) 步骤 1 在全局容器中加入Cookie: $di->set('cookies', function () { $cookies = new \Phalcon\Htt ...
- 15个Android通用流行框架大全
1. 缓存 DiskLruCache Java实现基于LRU的磁盘缓存 2.图片加载 Android Universal Image Loader 一个强大的加载,缓存,展示图片的库 Picass ...
- 设计模式--代理模式C++实现
代理模式C++实现 1定义 为其他对象提供一种代理以控制对这个对象的访问 2类图 角色定义: Subject抽象主体角色,抽象类或者接口,是一个普通的业务类型定义 RealSubject具体主体角色, ...
- hdu2121无定根的最小树形图
无定根的最小树形图,像网络流的超级源和超级汇一样加一个起点,用邻接表(n>1000) n<1000用邻接矩阵 #include<map> #include<set> ...
- 51nod-1574-排列转换
1574 排列转换 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 现在有两个长度为n的排列p和s.要求通过交换 ...