[BZOJ4007][JLOI2015]战争调度(DP+主定理)
第一眼DP,发现不可做,第二眼就只能$O(2^{1024})$暴搜了。
重新审视一下这个DP,f[x][i]表示在x的祖先已经全部染色之后,x的子树中共有i个参战平民的最大贡献。
设k为总结点数,对于DFS,我们有$T(1)=O(\log k)$,$T(k)=4T(\frac{k}{2})+O(k^2)$。
根据主定理,$O(n^{\log_ba})=O(n^2)$。故时间复杂度为$O(k^2\log k)$,即$O(2^{2n}n)$。
#include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
using namespace std; const int N=;
int n,m,mx,c[N],a[][N][N],f[N][N]; void dfs(int x,int d){
if (d==n){
f[x][]=f[x][]=;
for (int j=x>>; j; j>>=) f[x][c[j]]+=a[c[j]][x][j];
return;
}
int ls=x<<,rs=ls|;
rep(i,,<<(n-d)) f[x][i]=;
c[x]=; dfs(ls,d+); dfs(rs,d+);
rep(i,,min(m,<<(n-d))) rep(j,,min(m-i,(<<(n-d))-i))
f[x][i+j]=max(f[x][i+j],f[ls][i]+f[rs][j]);
c[x]=; dfs(ls,d+); dfs(rs,d+);
rep(i,,min(m,<<(n-d))) rep(j,,min(m-i,(<<(n-d))-i))
f[x][i+j]=max(f[x][i+j],f[ls][i]+f[rs][j]);
} int main(){
freopen("bzoj4007.in","r",stdin);
freopen("bzoj4007.out","w",stdout);
scanf("%d%d",&n,&m);
rep(i,<<(n-),(<<n)-)
for (int j=i>>; j; j>>=) scanf("%d",&a[][i][j]);
rep(i,<<(n-),(<<n)-)
for (int j=i>>; j; j>>=) scanf("%d",&a[][i][j]);
dfs(,);
rep(i,,m) mx=max(mx,f[][i]);
printf("%d\n",mx);
return ;
}
[BZOJ4007][JLOI2015]战争调度(DP+主定理)的更多相关文章
- 【BZOJ 4007】[JLOI2015]战争调度 DP+搜索+状压
又是一道思路清新的小清晰. 观察题目,如果我们确定了平民或者贵族的任意一方,我们便可以贪心的求出另一方,至此20分:我们发现层数十分小,那么我们就也是状压层数,用lca转移,线性dp,至此50分(好像 ...
- BZOJ4007 [JLOI2015]战争调度
根本想不出来... 原来还是暴力出奇迹啊QAQ 无限ymymym中 /************************************************************** Pr ...
- 【BZOJ4007】[JLOI2015]战争调度(动态规划)
[BZOJ4007][JLOI2015]战争调度(动态规划) 题面 BZOJ 洛谷 题解 神仙题,我是做不来. 一个想法是设\(f[i][j]\)表示当前考虑到\(i\)节点,其子树内有\(j\)个人 ...
- [JLOI2015]战争调度
[JLOI2015]战争调度 题目 解题报告 考试打了个枚举的暴力,骗了20= = $qsy$大佬的$DP$: 其实就是枚举= =,只不过枚举的比较强= = #include<iostream& ...
- 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp
题目描述 给你一棵 $n$ 层的完全二叉树,每个节点可以染黑白两种颜色.对于每个叶子节点及其某个祖先节点,如果它们均为黑色则有一个贡献值,如果均为白色则有另一个贡献值.要求黑色的叶子节点数目不超过 $ ...
- 【bzoj4007】[JLOI2015]战争调度 暴力+树形dp
Description 脸哥最近来到了一个神奇的王国,王国里的公民每个公民有两个下属或者没有下属,这种 关系刚好组成一个 n 层的完全二叉树.公民 i 的下属是 2 * i 和 2 * i +1.最下 ...
- [JLOI2015]战争调度【暴力+树形Dp】
Online Judge:Bzoj4007,Luogu P3262 Label:暴力,树形Dp 题解 参考了这篇blog https://www.cnblogs.com/GXZlegend/p/830 ...
- bzoj4007 & loj2111 [JLOI2015]战争调度 复杂度分析+树上背包
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4007 https://loj.ac/problem/2111 题解 同 [NOI2006]网络 ...
- 【题解】JLOI2015战争调度
搜索+状压+DP. 注意到一个性质:考虑一棵以x为根的子树,在x到原树的根的路径上的点如果都已经确定了方案,那么x的左右儿子的决策就彼此独立,互不影响了.所以我们考虑状压一条路径上每一层节点的状态,求 ...
随机推荐
- 【BZOJ4540】【HNOI2016】序列 [莫队][RMQ]
序列 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 给定长度为n的序列:a1,a2,…,a ...
- 【Atcoder】CODE FESTIVAL 2017 qual C D - Yet Another Palindrome Partitioning
[题意]给定只含小写字母的字符串,要求分割成若干段使段内字母重组顺序后能得到回文串,求最少分割段数.n<=2*10^5 [算法]DP [题解]关键在于快速判断一个字符子串是否合法,容易发现合法仅 ...
- 超详细的Java面试题总结(二)之Java基础知识篇
多线程和Java虚拟机 创建线程有几种不同的方式?你喜欢哪一种?为什么? 继承Thread类 实现Runnable接口 应用程序可以使用Executor框架来创建线程池 实现Callable接口. 我 ...
- charles https抓包
1. 配置 Charles 根证书 首先打开 Charles: Charles 启动界面 主界面 然后如下图操作: 之后会弹出钥匙串,如果不弹出,请自行打开钥匙串,如下图: 钥匙串 系统默认是不信 ...
- aptitude约等于apt-get的工具
如题,与之不同的是其会将依赖的程序也给删除. https://baike.baidu.com/item/aptitude/6849487?fr=aladdin 以下是一些常用 aptitude命令,仅 ...
- Linux汇编教程01: 基本知识
在我们开始学习Linux汇编之前,需要简单的了解一下计算机的体系结构.我们不需要特别深入的了解,理解了一些基本概念对与我们理解程序会很有帮助.现在计算机的结构体系都是采用冯诺依曼体系结构的基础上发展过 ...
- linux驱动基础系列--Linux mmc sd sdio驱动分析
前言 主要是想对Linux mmc子系统(包含mmc sd sdio)驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.块设备驱动.设备模型等也不进行详细说明原 ...
- 安全测试===sqlmap
本文转自:https://www.secpulse.com/archives/4213.html 鉴于很多新手对sqlmap的用法不是很熟悉 很多常用sqlmap的也不一定完全会用sqlmap 特 ...
- centos_7.1.1503_src_4
http://vault.centos.org/7.1.1503/os/Source/SPackages/ libkcompactdisc-4.10.5-3.el7.src.rpm 05-Jul-20 ...
- 菜鸟学习nodejs--Socket.IO即时通讯
https://blog.csdn.net/lovemenghaibin/article/details/51263774