【BZOJ4007】[JLOI2015]战争调度(动态规划)

题面

BZOJ

洛谷

题解

神仙题,我是做不来。

一个想法是设\(f[i][j]\)表示当前考虑到\(i\)节点,其子树内有\(j\)个人选择了打仗的最大贡献。

但是我们发现直接做我们并不会转移,因为我们不知道每个儿子的选择情况。

那么我们直接爆搜这条链上的每个点的情况,这样子到了叶子节点就可以直接转移上去。

而这样子爆搜的条件下,显然一个点的左右两个儿子是独立的,即转移是互不影响的,所以这样子并没有问题。

那么复杂度是什么呢?

我们理解为每个叶子节点都要对应的爆搜一次所有父亲的答案,这样子复杂度就是\(O(2^{2n})\),然后对于每一个点考虑,然后对于每一种爆搜情况,还要\(O(n)\)的转移。

所以复杂度就是\(O(2^{2n}n)\)。

#include<iostream>
#include<cstdio>
using namespace std;
#define MAX 1100
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int w1[MAX][MAX],w2[MAX][MAX];
int n,m,f[MAX][MAX],ans;
bool vis[MAX];
void dfs(int u,int d)
{
for(int i=0;i<=(1<<d);++i)f[u][i]=0;
if(!d)
{
for(int i=1;i<=n;++i)
if(vis[i])f[u][1]+=w1[u][i];
else f[u][0]+=w2[u][i];
return;
}
vis[d]=false;dfs(u<<1,d-1);dfs(u<<1|1,d-1);
for(int i=0;i<=(1<<(d-1));++i)
for(int j=0;j<=(1<<(d-1));++j)
f[u][i+j]=max(f[u][i+j],f[u<<1][i]+f[u<<1|1][j]);
vis[d]=true;dfs(u<<1,d-1);dfs(u<<1|1,d-1);
for(int i=0;i<=(1<<(d-1));++i)
for(int j=0;j<=(1<<(d-1));++j)
f[u][i+j]=max(f[u][i+j],f[u<<1][i]+f[u<<1|1][j]);
}
int main()
{
n=read();m=read();
for(int i=0;i<(1<<(n-1));++i)
for(int j=1;j<n;++j)w1[i+(1<<(n-1))][j]=read();
for(int i=0;i<(1<<(n-1));++i)
for(int j=1;j<n;++j)w2[i+(1<<(n-1))][j]=read();
dfs(1,n-1);
for(int i=0;i<=m;++i)ans=max(ans,f[1][i]);
printf("%d\n",ans);
return 0;
}

【BZOJ4007】[JLOI2015]战争调度(动态规划)的更多相关文章

  1. [BZOJ4007][JLOI2015]战争调度(DP+主定理)

    第一眼DP,发现不可做,第二眼就只能$O(2^{1024})$暴搜了. 重新审视一下这个DP,f[x][i]表示在x的祖先已经全部染色之后,x的子树中共有i个参战平民的最大贡献. 设k为总结点数,对于 ...

  2. BZOJ4007 [JLOI2015]战争调度

    根本想不出来... 原来还是暴力出奇迹啊QAQ 无限ymymym中 /************************************************************** Pr ...

  3. [JLOI2015]战争调度

    [JLOI2015]战争调度 题目 解题报告 考试打了个枚举的暴力,骗了20= = $qsy$大佬的$DP$: 其实就是枚举= =,只不过枚举的比较强= = #include<iostream& ...

  4. 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp

    题目描述 给你一棵 $n$ 层的完全二叉树,每个节点可以染黑白两种颜色.对于每个叶子节点及其某个祖先节点,如果它们均为黑色则有一个贡献值,如果均为白色则有另一个贡献值.要求黑色的叶子节点数目不超过 $ ...

  5. 【bzoj4007】[JLOI2015]战争调度 暴力+树形dp

    Description 脸哥最近来到了一个神奇的王国,王国里的公民每个公民有两个下属或者没有下属,这种 关系刚好组成一个 n 层的完全二叉树.公民 i 的下属是 2 * i 和 2 * i +1.最下 ...

  6. bzoj4007 & loj2111 [JLOI2015]战争调度 复杂度分析+树上背包

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4007 https://loj.ac/problem/2111 题解 同 [NOI2006]网络 ...

  7. [JLOI2015]战争调度【暴力+树形Dp】

    Online Judge:Bzoj4007,Luogu P3262 Label:暴力,树形Dp 题解 参考了这篇blog https://www.cnblogs.com/GXZlegend/p/830 ...

  8. 【题解】JLOI2015战争调度

    搜索+状压+DP. 注意到一个性质:考虑一棵以x为根的子树,在x到原树的根的路径上的点如果都已经确定了方案,那么x的左右儿子的决策就彼此独立,互不影响了.所以我们考虑状压一条路径上每一层节点的状态,求 ...

  9. 【BZOJ 4007】[JLOI2015]战争调度 DP+搜索+状压

    又是一道思路清新的小清晰. 观察题目,如果我们确定了平民或者贵族的任意一方,我们便可以贪心的求出另一方,至此20分:我们发现层数十分小,那么我们就也是状压层数,用lca转移,线性dp,至此50分(好像 ...

随机推荐

  1. J2SE学习历程

    2014/12/09 1.+两边有字符串的话,则另外的先转换为字符串再连接. int c = 12; System.out.println(“c=” + c); 2.如果a=2,b=a++,先赋值再运 ...

  2. winform注册功能

    注册按钮事件: private void btnRegister_Click(object sender, EventArgs e) { string username = txtUserName.T ...

  3. Keepalived 的使用

    1.什么是keepalived Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当w ...

  4. java 学习必备的软件,持续更新中

    小编会持续更新在学习Java过程中需要的软件以及各种文件: 话不多说,看行动! 一:JDK (1)JDK1.8(*64): 链接:https://pan.baidu.com/s/1vM0jNXn2CT ...

  5. spring boot拦截器中获取request post请求中的参数

    最近有一个需要从拦截器中获取post请求的参数的需求,这里记录一下处理过程中出现的问题. 首先想到的就是request.getParameter(String )方法,但是这个方法只能在get请求中取 ...

  6. findlibrary returned null

    转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10181330.html 该错误是在加载so库的时候出现的,就是找不到so库. 一.检查jinLibs目录 ...

  7. Linux-Redmine安装方法

    Linux-Redmine安装方法 QQ群交流:585499566 一.环境准备 1,Linux系统:centos6.5 2,Redmine安装包:bitnami-redmine-3.4.6-0-li ...

  8. 移动端click延迟和tap事件

    一.click等事件在移动端的延迟 click事件在移动端和pc端均可以触发,但是在移动端有延迟现象. 1.背景 由于早期移动设备浏览网页时内容较小,为了增强用户体验,苹果公司专门为移动设备设计了双击 ...

  9. 海思uboot启动流程详细分析(三)【转】

    1. 前言 书接上文(u-boot启动流程分析(二)_平台相关部分),本文介绍u-boot启动流程中和具体版型(board)有关的部分,也即board_init_f/board_init_r所代表的. ...

  10. mysql 高级

    Sql优化: 1.SELECT语句中避免使用 *, 尽量根据业务需求按字段进行查询 举例:如果表中有个字段用的是clob或者是blob这种大数据字段的话, 他们的查询应该根据业务需要来进行指定字段的查 ...