luogu 3698 [CQOI2017]小Q的棋盘 树形dp
Code:
#include <bits/stdc++.h>
#define N 107
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n,K,f[N][N],g[N][N],tmp[N][N];
vector<int>G[N];
void add(int u,int v)
{
G[u].push_back(v);
}
void getmax(int &a,int b)
{
if(b>a) a=b;
}
void dfs(int u,int ff)
{
f[u][0]=tmp[u][0]=1;
for(int i=0;i<G[u].size();++i)
{
int v=G[u][i];
if(v==ff) continue;
dfs(v,u);
for(int j=K;j>=0;--j)
{
for(int d=0;d<=j;++d)
{
if(j-d-1>=0)
{
getmax(tmp[u][j], f[u][j-d-1]+g[v][d]); // 新走
}
if(j-d-2>=0) getmax(tmp[u][j],tmp[u][j-d-2]+f[v][d]); // 以前走过
}
}
for(int j=K;j>=0;--j)
{
for(int d=0;d<=j;++d)
if(j-d-2>=0) getmax(f[u][j], f[u][j-d-2]+f[v][d]);
}
}
for(int i=0;i<=K;++i) g[u][i]=tmp[u][i];
}
int main()
{
int i,j;
// setIO("input");
scanf("%d%d",&n,&K);
for(i=1;i<=n-1;++i)
{
int a,b;
scanf("%d%d",&a,&b),add(a+1,b+1),add(b+1,a+1);
}
dfs(1,0);
int ans=0;
for(i=1;i<=K;++i) getmax(ans, g[1][i]);
printf("%d\n",ans);
return 0;
}
luogu 3698 [CQOI2017]小Q的棋盘 树形dp的更多相关文章
- Luogu 3698 [CQOI2017]小Q的棋盘
BZOJ 4813 虽然数据范围很迷人,但是想树形$dp$没有前途. 先发现一个事情,就是我们可以先选择一条链,最后要走到这一条链上不回来,走到链上的点每一个只需要一步,而如果要走这条链之外的点,一个 ...
- BZOJ 1813 [Cqoi2017]小Q的棋盘 ——树形DP
唔,貌似以前做过这样差不多的题目. 用$f(i,0/1)$表示从某一点出发,只能走子树的情况下回到根.不回到根的最多经过不同的点数. 然后就可以DP辣 #include <map> #in ...
- bzoj 4813: [Cqoi2017]小Q的棋盘 [树形背包dp]
4813: [Cqoi2017]小Q的棋盘 题意: 某poj弱化版?树形背包 据说还可以贪心... #include <iostream> #include <cstdio> ...
- BZOJ4813或洛谷3698 [CQOI2017]小Q的棋盘
BZOJ原题链接 洛谷原题链接 贪心或树形\(DP\)都可做,但显然\(DP\)式子不好推(因为我太菜了),所以我选择贪心. 很显然从根出发主干走最长链是最优的,而剩下的点每个都需要走两步,所以用除去 ...
- BZOJ_4813_[Cqoi2017]小Q的棋盘_dfs
BZOJ_4813_[Cqoi2017]小Q的棋盘_dfs Description 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能 在有连线的格 ...
- 洛谷 P3698 [CQOI2017]小Q的棋盘 解题报告
P3698 [CQOI2017]小Q的棋盘 题目描述 小 Q 正在设计一种棋类游戏. 在小 Q 设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上 ...
- [BZOJ4813][CQOI2017]小Q的棋盘(DP,贪心)
4813: [Cqoi2017]小Q的棋盘 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 804 Solved: 441[Submit][Statu ...
- 【BZOJ4813】[CQOI2017]小Q的棋盘(贪心)
[BZOJ4813][CQOI2017]小Q的棋盘(贪心) 题面 BZOJ 洛谷 题解 果然是老年选手了,这种题都不会做了.... 先想想一个点如果被访问过只有两种情况,第一种是进入了这个点所在的子树 ...
- [bzoj4813][Cqoi2017]小Q的棋盘
来自FallDream的博客,未经允许,请勿转载,谢谢. 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上共有V ...
随机推荐
- @WebServlet注解
@WebServlet("/LoginServlet") jsp页面: <form action="LoginServlet" method = &quo ...
- Python基础学习路径
1. Python数据结构 1. 基本数据类型(整数.小数.字符) 1.基本数据类型有5种:int bool float complex long 2.每一种数据类型该如何定义 3.数据类型之间可以强 ...
- fontmin字体子集
怕忘了做个记录 链接:http://ecomfe.github.io/fontmin/#feature 特点:方便,快捷.
- 怎样实现跨域AJAX请求发送Cookie
第一步: 服务器必须在Response Header中设置: Access-Control-Allow-Credentials: true 第二步: 客户端发起请求时需要将 xhr.withCrede ...
- Java多线程(八):ReentrantReadWriteLock
读写锁ReentrantReadWriteLock概述 读写锁ReentrantReadWriteLock,使用它比ReentrantLock效率更高. 读写锁表示两个锁,一个是读操作相关的锁,称为共 ...
- c#OpenCVSharp+Zxing识别条形码
参考博客:https://www.cnblogs.com/dengxiaojun/p/5278679.html,但是他的demo下载太贵了 可以下载这个https://download.csdn.ne ...
- JavaScript Basics_Fundamentals Part 1_Variables
JavaScript Variables JavaScript 变量(Variables)是用于存储数据值的容器. 创建一个 JavaScript 变量,可以使用关键字 let. Example le ...
- .NET webapi 的单元测试
public abstract class MirAPIUnitTestCommon { public abstract string GetBaseAddress(); /// <summar ...
- 【Java并发】基础
一.概述 1.1 线程与进程区别 1.2 多线程引发的性能问题 二.多线程创建方式 2.1 第一种-继承Thread类 2.2 第二种-实现Runnable接口 2.3 第三种-实现Callable接 ...
- 三:MVC之Lambda表达式
Lambda表达式 Lambda表达式是一个匿名方法,即没有方法名的方法. C#中的Lambda表达式使用Lambda运算符“=>”,该运算符读为“goes to”. 语法: 形参列表=> ...