洛谷 P4201 设计路线 [NOI2008] 树形dp
正解:树形dp
解题报告:
大概是第一道NOI的题目?有点激动嘻嘻
然后先放个传送门
先大概港下这题的题意是啥qwq
大概就是给一棵树,然后可以选若干条链把链上的所有边的边权变成0,但是这些链不能有交集,问所有点到根的边权最大值的最小值是多少,然后有几种这样的方案
大概解释下我们是怎么搞出来这个题意的...我发现我语文巨差好几道题死于无法理解题意了?药丸药丸QAQQQ
就是首先看懂它说每个城市最多和一个左边的城市相连,那我们把它横过来看就相当于说最多和一个上面的城市相连,就是棵树咯,那就先把无解判掉,就如果m!=n-1就无解了咯(话说它还给了句说经度不同?然而我没懂这句话暗示了什么我就没放上来了,先放着,存疑qwq
然后就是颗树,它又说了一堆,还是可以理解的玩意儿,说能把一些路变成0啥的,不详说了大概这个意思
然后又一个点"每个城市在每个序列中最多出现一次""每个城市最多只能出现在一条规划路线中",好滴然后就能明白,就是要扣一些链并且链不能有公共部分咯
好那我们总算把题目理清了QAQ开始讲题QAQ
其实这题dp,没有那么难?对我而言感觉没有前面刚肝的pocky游戏那么难搞欸? 就是想我肯定还是想不出来的,但是理解还是相对比较好理解的呢(umm也可能是我状压学太差了QAQ)
感觉没有什么好港的鸭。。。就直接进入正题讲这个dp趴
就是最最普通的序列dp鸭,f[i][j][0/1/2]:到第i个点了,当前最大边权和=j,连了0/1/2个崽的方案数量,然后方案数这种东西显然可以乘法原理处理转移一波
就是直接枚举j,通过一些玄学计算x(晚上来解释qwq)可以等到j小于等于10的所以直接枚举就好qwq
(关于这个j的计算,最简单的可以直接树链剖分知识得小于等于20,但是如果优秀一点儿,可以想到三叉树balabala的然后就可以得到j小于等于10的呢?umm反正这两种我都不会呢,,,等学了树链剖分再来解释趴qwq)
然后还是详细解释下状态转移方程qwq
就分类讨论鸭,考虑选择 连这个崽 和 不连这个崽,转移到f[i][j][0/1/2]
设这个点是u然后枚举到的崽是v
可以考虑到,如果连这个崽,那这个崽的maxans(也就是j)就不会被更新,否则就会被更新,所以就从j和j-1转移来嘛
还一个就是如果我选了这个崽那这个崽是最多只能连一个崽的,但是如果没选当然是没限制的012都成qwq
那就 f[u][j][2]=f[u][j][2]*(f[v][j-1][0]+f[v][j-1][1]+f[v][j-1][2])+f[u][j][1]*(f[v][j][0]+f[v][j][1])
f[u][j][1]=f[u][j][1]*(f[v][j-1][0]+f[v][j-1][1]+f[v][j-1][2])+f[v][j][0]*(f[v][j][0]+f[v][j][1])
f[u][j][0]=f[u][j][0]*(f[v][j-1][0]+f[v][j-1][1]+f[v][j-1][2])
umm大概这样趴,如果有错明儿再搞算了qwq
最近好颓啊感觉,信心满满地说要每天做一道题然后结果是每天颓好久QAQ哭死了QAQ
然后T1答案就很简单了嘛,就搞完之后从小到大枚举j,然后如果f[1][j][0/1/2]!=0了j就是答案了,能明白?
over!
大概下周会做掉这题然后来放代码qwq
洛谷 P4201 设计路线 [NOI2008] 树形dp的更多相关文章
- 洛谷 P3177 [HAOI2015]树上染色 树形DP
洛谷 P3177 [HAOI2015]树上染色 树形DP 题目描述 有一棵点数为 \(n\) 的树,树边有边权.给你一个在 \(0 \sim n\)之内的正整数 \(k\) ,你要在这棵树中选择 \( ...
- 洛谷P1040 加分二叉树(树形dp)
加分二叉树 时间限制: 1 Sec 内存限制: 125 MB提交: 11 解决: 7 题目描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,...,n),其中数字1,2,3,...,n ...
- 洛谷P4438 道路 [HNOI/AHOI2018] 树形dp
正解:树形dp 解题报告: 传送门! 昂首先看懂题目趴QwQ大概就是说有棵满二叉树,有n个叶子节点(乡村)和n-1个非叶子节点,然后这棵树的每个节点有三个属性abc,对每个非叶子节点可以从与子节点的两 ...
- 洛谷 P3267 [JLOI2016/SHOI2016]侦察守卫(树形dp)
题面 luogu 题解 树形\(dp\) \(f[x][y]表示x的y层以下的所有点都已经覆盖完,还需要覆盖上面的y层的最小代价.\) \(g[x][y]表示x子树中所有点都已经覆盖完,并且x还能向上 ...
- 洛谷P1351 联合权值(树形dp)
题意 题目链接 Sol 一道很简单的树形dp,然而被我写的这么长 分别记录下距离为\(1/2\)的点数,权值和,最大值.以及相邻儿子之间的贡献. 树形dp一波.. #include<bits/s ...
- 洛谷P4099 [HEOI2013]SAO(树形dp)
传送门 HEOI的题好珂怕啊(各种意义上) 然后考虑树形dp,以大于为例 设$f[i][j]$表示$i$这个节点在子树中排名第$j$位时的总方案数(因为实际只与相对大小有关,与实际数值无关) 我们考虑 ...
- 洛谷 P1351 联合权值 —— 树形DP
题目:https://www.luogu.org/problemnew/show/P1351 树形DP,别忘了子树之间的情况(拐一下距离为2). 代码如下: #include<iostream& ...
- 洛谷 P2634 聪聪可可 —— 树形DP / 点分治
题目:https://www.luogu.org/problemnew/show/P2634 今天刚学了点分治,做例题: 好不容易A了,结果发现自己写的是树形DP...(也不用找重心)(比点分治快) ...
- 洛谷P3047 [USACO12FEB]Nearby Cows(树形dp)
P3047 [USACO12FEB]附近的牛Nearby Cows 题目描述 Farmer John has noticed that his cows often move between near ...
随机推荐
- Bugly最简单的配置方法
1,注册Bugly帐号 2.项目 build.gradle 中配置 compile 'com.tencent.bugly:crashreport:latest.release'//其中latest.r ...
- react中的hoc和修饰器@connect结合使用
在学习react-redux的时候,看到了修饰器这个新的属性,这个是es7的提案属性,很方便.于是我用@connect代替了connect(使用的时候需要配置,这里不赘述),省去了很多不必要的代码,但 ...
- gcc/g++基本命令简介
gcc & g++现在是gnu中最主要和最流行的c & c++编译器 .g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c.这时候命令换做gcc即可.其实是无关紧要的.其 ...
- C/C++获取文件后缀名并且比较
以下这段是VC中过去文件后缀名的方法 1.CString GetSuffix(CString strFileName) { return strFileName.Right(strFi ...
- 《Lua程序设计》9.3 以协同程序实现迭代器 学习笔记
例:编写一个迭代器,使其可以遍历某个数组的所有排列组合形式.代码如下: function permgen(a, n) n = n or #a -- 默认n为a的大小 then -- 还需要改变吗? p ...
- 实现iOS中的链式编程
谈到链式编程,那Masonry几乎就是最经典的代表.如: make.top.equalTo(self.view).offset() 像这样top.equalTo(self.view).offset(6 ...
- JS 实现拖动效果
<html> <body style="margin:0px;"> <script src="http://ajax.googleapis. ...
- MegaCli 使用
安装: wget ftp://rpmfind.net/linux/Mandriva/devel/cooker/x86_64/media/non-free/release/megacli-8.02.21 ...
- c++11 delete禁用函数
c++11添加了delete关键字. 不想用那个函数,在那个函数后面加 = delete就可以了: 比如: 在函数重载中,可用 delete 来滤掉一些函数的形参类型,如下: bool IsLucky ...
- Twitter的SnowFlake分布式id生成算法
二进制相关知识回顾 1.所有的数据都是以二进制的形式存储在硬盘上.对于一个字节的8位到底是什么类型 计算机是如何分辨的呢? 其实计算机并不负责判断数据类型,数据类型是程序告诉计算机该如何解释内存块. ...