BZOJ 1813 [Cqoi2017]小Q的棋盘 ——树形DP
唔,貌似以前做过这样差不多的题目。
用$f(i,0/1)$表示从某一点出发,只能走子树的情况下回到根、不回到根的最多经过不同的点数。
然后就可以DP辣
#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define mp make_pair int dp[105][105][2],n,m;
int h[205],to[205],ne[205],en=0; void add(int a,int b)
{to[en]=b;ne[en]=h[a];h[a]=en++;} void Finout()
{
freopen("chessboard.in","r",stdin);
freopen("chessboard.out","w",stdout);
} void dfs(int o,int fa)
{
dp[o][0][1]=1;
for (int i=h[o];i>=0;i=ne[i])
if (to[i]!=fa)
{
dfs(to[i],o);
for (int j=m;j>=0;--j)
{
for (int k=0;k<=j-2;++k)
dp[o][j][1]=max(dp[o][j][1],dp[to[i]][k][1]+dp[o][j-k-2][1]);
for (int k=0;k<=j-2;++k)
dp[o][j][0]=max(dp[o][j][0],dp[to[i]][k][1]+dp[o][j-k-2][0]);
for (int k=0;k<=j-1;++k)
dp[o][j][0]=max(dp[o][j][0],dp[to[i]][k][0]+dp[o][j-k-1][1]);
}
}
for (int j=m;j>=0;--j)
dp[o][j][0]=max(dp[o][j][0],dp[o][j][1]);
} int main()
{
memset(dp,-0x3f,sizeof dp);
memset(h,-1,sizeof h);
scanf("%d%d",&n,&m);
F(i,1,n-1)
{
int a,b;
scanf("%d%d",&a,&b);
a++;b++;add(a,b);add(b,a);
}
dfs(1,-1);
int ans=-1;
F(i,0,m) ans=max(ans,max(dp[1][i][0],dp[1][i][1]));
printf("%d\n",ans);
}
BZOJ 1813 [Cqoi2017]小Q的棋盘 ——树形DP的更多相关文章
- bzoj 4813: [Cqoi2017]小Q的棋盘 [树形背包dp]
4813: [Cqoi2017]小Q的棋盘 题意: 某poj弱化版?树形背包 据说还可以贪心... #include <iostream> #include <cstdio> ...
- luogu 3698 [CQOI2017]小Q的棋盘 树形dp
Code: #include <bits/stdc++.h> #define N 107 #define setIO(s) freopen(s".in","r ...
- bzoj 4813: [Cqoi2017]小Q的棋盘
Description 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能 在有连线的格点之间移动.整个棋盘上共有V个格点,编号为0,1,2-,V- ...
- bzoj 4813: [Cqoi2017]小Q的棋盘【树形dp】
这么简单的dp我怎么没想到x2 f为从这个点出发后回到这个点最多能走过的点,g为从这个点出发后不回到这个点最多能走过的点,注意g有两种转移:g[u][k]=max(g[u][k],f[u][k-j-1 ...
- 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 洛谷 题解 果然是老年选手了,这种题都不会做了.... 先想想一个点如果被访问过只有两种情况,第一种是进入了这个点所在的子树 ...
- bzoj 4815: [Cqoi2017]小Q的表格 [数论]
4815: [Cqoi2017]小Q的表格 题意: 单点修改,查询前缀正方形和.修改后要求满足条件f(a,b)=f(b,a), b×f(a,a+b)=(a+b)*f(a,b) 一开始sb了认为一次只会 ...
随机推荐
- moment算本月开始日期和结束日期
moment算本月开始日期和结束日期 1.引入moment.js var vStartDate=new moment().add('month',addMonth).format("YYYY ...
- 在linux下面安装mysql 确认 配置文件路径 my.cnf
1.确认服务器my.cnf 文件路径.但不知道那个是 2.通过which mysql命令来查看mysql的安装位置: 3.通过/usr/local/mysql/bin/mysqld --verbose ...
- 如何计算CDS view里两个时间戳之间的天数间隔
ABAP透明表里的时间戳,数据类型为dec: 有个需求:计算这两个时间戳之间的天数间隔,丢弃时间戳年-月-日8位后面的小时:分钟:秒. 举个例子:如果时间戳是20180918173132,丢弃1731 ...
- 使用javap分析Java的字符串操作
我们看这样一行简单的字符串赋值操作的Java代码. String a = "i042416"; 使用命令行将包含了这行代码的Java类反编译查看其字节码: javap -v con ...
- nuxt 初接触
对于nuxt服务端渲染让人动心的是不会再想vue一样去定义无数的路由了这一点是挺爽的!!! 先直接晒张图 在api这块增加了一个fetch方法 它会在组件每次加载前被调用(即在服务端或切换至目标路 ...
- Bootstrap历练实例:链接样式按钮
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...
- shell脚本,通过传入的参数来计算最大值和最小值以及平均值。
[root@localhost zuoye]# cat quansges.sh #!/bin/bash > file [ ! $# -ge ] && || echo $* > ...
- netstat Recv-Q和Send-Q详解
http://blog.csdn.net/sjin_1314/article/details/9853163 通过netstat -anp可以查看机器的当前连接状态: Active Interne ...
- Lazy Instantiator
lazy instantiator (懒加载.延迟实例化.延迟初始化) 最开始看斯坦福的视频,对 延迟初始化 这个概念,不太理解 只见到,有些属性的初始化是在init做的,有些是在viewDidLoa ...
- RN性能
https://facebook.github.io/react-native/docs/performance.html 一个使用RN而不是webView的重要原因是可实现60fps以及更类似原生a ...