【题解】 bzoj1864: [Zjoi2006]三色二叉树 (动态规划)
Solution:
- 其实想出来了\(dp\)方程推出来了最大值,一直没想到推最小值
- \(dp[i][1/0]\)表示\(i\)号节点的子树中的绿色染色最大值,\(1\)表示该节点染色,\(0\)表示该节点不染色
\]
\]
- \(f[i][1/0]\)表示存的最小值,状态同上
\]
\]
傻逼dp题卡了我好久
Code:
//It is coded by Ning_Mew on 4.20
#include<bits/stdc++.h>
#define ls(x) node[x].ch[0]
#define rs(x) node[x].ch[1]
using namespace std;
const int maxn=5e5+7;
int n,cnt=1,pl=-1;
struct Node{
int ch[2];
//Node(){ch[0]=-1;ch[1]=-1;}
}node[maxn];
int dp[maxn][2],f[maxn][2];
string s;
void build(int u){
pl++;
if(s[pl]=='0'){dp[u][0]=0;dp[u][1]=1;f[u][0]=0;f[u][1]=1;return;}
if(s[pl]=='2'){
cnt++;node[u].ch[0]=cnt;build(cnt);
cnt++;node[u].ch[1]=cnt;build(cnt);
dp[u][1]=dp[ ls(u) ][0]+dp[ rs(u) ][0]+1;
dp[u][0]=max(dp[ ls(u) ][0]+dp[ rs(u) ][1],dp[ rs(u) ][0]+dp[ ls(u) ][1]);
f[u][1]=f[ ls(u) ][0]+f[ rs(u) ][0]+1;
f[u][0]=min(f[ ls(u) ][0]+f[ rs(u) ][1],f[ ls(u) ][1]+f[ rs(u) ][0]);
}
if(s[pl]=='1'){
cnt++;node[u].ch[0]=cnt;build(cnt);
dp[u][0]=dp[ ls(u) ][1];
dp[u][1]=dp[ ls(u) ][0]+1;
f[u][0]=f[ ls(u) ][0];
f[u][1]=f[ ls(u) ][0]+1;
}return;
}
int main(){
cin>>s;
build(1);
/*for(int i=1;i<=cnt;i++){
cout<<i<<' '<<node[i].ch[0]<<' '<<node[i].ch[1]<<endl;
}*/
printf("%d %d\n",max(dp[1][0],dp[1][1]),min(f[1][0],f[1][1]));
return 0;
}
【题解】 bzoj1864: [Zjoi2006]三色二叉树 (动态规划)的更多相关文章
- BZOJ1864[ZJOI2006]三色二叉树[树形DP]
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 773 Solved: 548[Submit][Status] ...
- bzoj千题计划212:bzoj1864: [Zjoi2006]三色二叉树
http://www.lydsy.com/JudgeOnline/problem.php?id=1864 #include<cstdio> #include<cstring> ...
- bzoj1864 [Zjoi2006]三色二叉树
Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. Sample ...
- 【BZOJ1864】三色二叉树(动态规划)
[BZOJ1864]三色二叉树(动态规划) 题面 BZOJ 题解 首先把树给构出来. 设\(f[i][0/1]\)表示当前节点\(i\),是否是绿色节点的子树中最大/最小的绿色节点的个数和. 转移很显 ...
- 【BZOJ1864】[Zjoi2006]三色二叉树 树形DP
1864: [Zjoi2006]三色二叉树 Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最 ...
- 嘴巴题5 「BZOJ1864」[ZJOI2006] 三色二叉树
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1195 Solved: 882 [Submit][Status ...
- 【BZOJ-1864】三色二叉树 树形DP
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 659 Solved: 469[Submit][Status] ...
- BZOJ 1864: [Zjoi2006]三色二叉树( 树形dp )
难得的ZJOI水题...DFS一遍就行了... ----------------------------------------------------------------------- #inc ...
- BZOJ_1864_[Zjoi2006]三色二叉树_树形DP
BZOJ_1864_[Zjoi2006]三色二叉树_树形DP 题意: 分析:递归建树,然后DP,从子节点转移. 注意到红色和蓝色没有区别,因为我们可以将红蓝互换而方案是相同的.这样的话我们只需要知道当 ...
随机推荐
- *p++,*++p,*(p++),*(++p)
直接上代码: #include <stdio.h> #include <stdlib.h> int main () { ,,,}; ; int *p, *tmp; p = &a ...
- Android Device Monitor 文件管理的常见问题 - z
Android Device Monitor 是 Android Studio 中用于监测模拟器或真机运行状态的一款开发者工具.但开发者在使用它的过程中往往会遇到很多问题,尤其对于新手.本文分析了实际 ...
- c# Findwindow sendMessage
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServi ...
- 20155235 《网络攻防》 实验五 MSF基础应用
20155235 <网络攻防> 实验五 MSF基础应用 实验内容 一个主动攻击实践,如ms08_067; (1分) 一个针对浏览器的攻击,如ms11_050:(1分) 一个针对客户端的攻击 ...
- oracle10g安装在裸设备上
参考了百度文库上的 <在裸设备上面安装oracle10g> 一文. 不过为了简单起见,我选择OS 为 Redhat AS 4.8 32位. 准备安装数据库为 ...
- ILSVRC2016目标检测任务回顾——视频目标检测(VID)
转自知乎<深度学习大讲堂> 雷锋网(公众号:雷锋网)按:本文作者王斌,中科院计算所前瞻研究实验室跨媒体计算组博士生,导师张勇东研究员.2016年在唐胜副研究员的带领下,作为计算所MCG-I ...
- 基于Vue手写一个下拉刷新
当然不乏有很多下拉刷新的插件可以直接使用,但是自定义程度不强,大部分都只能改改文字,很难满足设计师的创意,譬如淘宝和京东首页那种效果,就需要自己花心思倒腾了,最近刚好有这种需求,做完了稍微总结一下,具 ...
- 虚拟机console基础环境部署——安全加固
1. 概述 安全是一个重要的课题.广义上可以总结为: 主机安全 网络安全 信息安全 数据安全 虽然console已经是最小化安装,但是这并不能说明console就已经安全了.之前的博客对console ...
- fis入门-单文件编译之文件优化(optimize)
FIS(Front-end Integrated Solution ),是百度的前端集成解决方案.最近几天在研究前端构建的东西,就顺便了解了下,果断各种高大上,可以到FIS官网围观感受一下.如果对fi ...
- Hadoop框架
1.Hadoop的整体框架 Hadoop由HDFS.MapReduce.HBase.Hive和ZooKeeper等成员组成,其中最基础最重要元素为底层用于存储集群中所有存储节点文件的文件系统HDFS( ...