bzoj千题计划164:bzoj5123: 线段树的匹配
http://www.lydsy.com/JudgeOnline/upload/201712/prob12.pdf
dp[len][0/1] 表示节点表示区间长度为len,节点选/不选的 最大匹配
sum[len][0/1] 表示对应dp[len][0/1]的方案数
这里选节点即选节点与其父节点的边
设区间长度为len,左子区间长度为L,右子区间长度为R
这个节点选,那么左右子节点都不能选
dp[len][1]=1+dp[L][0]+dp[R][0]
sum[len][1]=sum[L][0]*sum[R][0]
这个节点不选,有3种情况:
左右子节点都不选:
dp[len][0]=dp[L][0]+dp[R][0]
sum[len][0]=sum[L][0]+sum[R][0]
选左子节点:
dp[len][0]=dp[L][1]+dp[R][0]
sum[len][0]=sum[L][1]+sum[R][0]
选右子节点:
dp[len][0]=dp[L][0]+dp[R][1]
sum[len][0]=sum[L][0]+sum[R][1]
如果dp[len][0] 在三种情况中有相同的,sum[len][0]要累加
len虽然是1e18,但只会用log种,所以用map
#include<map> #include<cstdio> #include<cstring>using namespace std;typedef long long LL;const int mod=998244353;//int dp[100001][2]; //int sum[10001][2]; map<LL,LL>dp[2]; map<LL,LL>sum[2];void dfs(LL len) {if(len==1){dp[0][1]=0;sum[0][1]=1;dp[1][1]=1;sum[1][1]=1;return;}LL R=len>>1;LL L=len-R;if(dp[0].find(L)==dp[0].end()) dfs(L);if(dp[0].find(R)==dp[0].end()) dfs(R);dp[1][len]=1+dp[0][L]+dp[0][R];sum[1][len]=sum[0][L]*sum[0][R]%mod;dp[0][len]=dp[1][len]-1;sum[0][len]=sum[1][len];if(dp[0][L]+dp[1][R]>dp[0][len]){dp[0][len]=dp[0][L]+dp[1][R];sum[0][len]=sum[0][L]*sum[1][R]%mod;}else if(dp[0][L]+dp[1][R]==dp[0][len]){sum[0][len]=(sum[0][len]+sum[0][L]*sum[1][R])%mod;}if(dp[1][L]+dp[0][R]>dp[0][len]){dp[0][len]=dp[1][L]+dp[0][R];sum[0][len]=sum[1][L]*sum[0][R]%mod;}else if(dp[1][L]+dp[0][R]==dp[0][len]){sum[0][len]=(sum[0][len]+sum[1][L]*sum[0][R])%mod;} }int main() {LL n;scanf("%I64d",&n);dfs(n);printf("%I64d %I64d",dp[0][n],sum[0][n]); }
转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8148895.html
bzoj千题计划164:bzoj5123: 线段树的匹配相关推荐
- bzoj千题计划128:bzoj4552: [Tjoi2016Heoi2016]排序
http://www.lydsy.com/JudgeOnline/problem.php?id=4552 二分答案 把>=mid 的数看做1,<mid 的数看做0 这样升序.降序排列相当于 ...
- BZOJ 2151 种树(可反悔贪心,链表)【BZOJ千题计划】就图一乐
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2151 是 hydro 的 BZOJ ...
- BZOJ 2150. 部落战争(最小路径覆盖问题)【BZOJ千题计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 刷题就图一乐 题目链接 https://hydro.ac/d/bzoj/p/2150 是 hydro ...
- BZOJ 1799 [Ahoi2009] self 同类分布(数位DP)【BZOJ千题计划(quexin】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/1799(样例时限设置有问题,应该为 2 ...
- bzoj千题计划143:bzoj1935: [Shoi2007]Tree 园丁的烦恼
http://www.lydsy.com/JudgeOnline/problem.php?id=1935 二维偏序问题 排序x,离散化树状数组维护y #include<cstdio> #i ...
- bzoj千题计划248:bzoj3697: 采药人的路径
http://www.lydsy.com/JudgeOnline/problem.php?id=3697 点分治 路径0改为路径-1 g[i][0/1] 和 f[i][0/1]分别表示当前子树 和 已 ...
- bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战
http://www.lydsy.com/JudgeOnline/problem.php?id=1879 f[i][j] 表示匹配了i个字符,匹配字符串的状态为j的方案数 枚举下一个字符是什么 计算加 ...
- bzoj千题计划181:bzoj1878: [SDOI2009]HH的项链
http://www.lydsy.com/JudgeOnline/problem.php?id=1878 之前用莫队做的,现在用树状数组 把每种数的第一个出现位置在树状数组中+1 nxt[i] 记录i ...
- bzoj千题计划203:bzoj3994: [SDOI2015]约数个数和
http://www.lydsy.com/JudgeOnline/problem.php?id=3994 设d(x)为x的约数个数,给定N.M,求 用到的一个结论: 证明: 枚举n的约数i,枚举m的约 ...
- bzoj千题计划126:bzoj1038: [ZJOI2008]瞭望塔
http://www.lydsy.com/JudgeOnline/problem.php?id=1038 本题可以使用三分法 将点按横坐标排好序后 对于任意相邻两个点连成的线段,瞭望塔的高度 是单峰函 ...
最新文章
- oracle数据库dba密码,Oracle数据库的找回DBA账户的密码
- 用串口模拟printf函数输出
- bootstrap.yml和application.yml的区别
- 去除Activity的标题栏以及全屏显示
- 如何在ui5 xml view中使用嵌入的自定义css style
- 【设计模式】单例模式 Singleton Pattern
- 喷喷计算机语言掌握的程度
- 网页中JS函数自动执行常用三种方法
- 论述计算机与外设的访问控制方法,试论述计算机与外设访问控制的方法有多少种各有什么优缺点...
- capjoint一些生成文件的解释
- VC2005项目属性配置
- SDS之BlockChain Storage系列:3、为什说区块链存储是下一个热点 (上)
- HTTPS证书基本概述
- 5G NR 基本概念
- 什么样的软件架构是好的?
- 汉诺塔游戏java下载,利用python实现汉诺塔游戏
- 三态门的组成及工作原理
- Spring实战读书笔记 高级装配(1)
- [附源码]Nodejs计算机毕业设计理想电子商城网站Express(程序+LW)
- 计算机蓝屏安全模式都启动不了,windows进入系统安全模式时蓝屏怎么办?
热门文章
- Linux 下安装 Elasticsearch5.6.x 详细步骤以及踩坑解决方案
- mysql教程datetime_Mysql中的Datetime与Timestamp不同之处
- 安装360后无法远程sqlserver error:64
- 上传excel,并保存excel内容
- winform ComboBox基本操作
- 本地 hosts 文件找不到怎么办
- OFFICE使用技术:让几个自选图形间距相等
- 有的字体,设置了粗体,也不能用粗体方式来绘制
- checking build system type... ./config.guess: unable to guess system type/you must specify one
- maven打包时加入依赖jar包