「JLOI2015」战争调度

感觉一到晚上大脑就宕机了...

题目本身不难,就算没接触过想想也是可以想到的

这个满二叉树的深度很浅啊,每个点只会和它的\(n-1\)个祖先匹配啊

于是可以暴力枚举祖先链的选择

然后处理某个点\(i\)时,已经枚举了\(i\)到根的祖先的选择

这时候我们发现枚举\(i\)后,左右儿子的贡献的独立的,然后左右儿子的选择对上面是没有影响的

可以直接设\(dp_{i,j}\)表示\(i\)子树\(j\)黑点的最大值

然后直接子树合并两个儿子就可以了

复杂度?

\(T(n)=2(2T(n-1)+2^n)\)

好像是这个,化出来差不多是\(O(n2^{2n})\)


Code:

#include <cstdio>
#include <cctype>
#include <algorithm>
using std::max;
template <class T>
void read(T &x)
{
x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
}
#define ls id<<1
#define rs id<<1|1
const int N=1<<10;
int dp[N][N],w[N][N],f[N][N],cho[N],n,m;
void dfs(int id,int k)
{
for(int i=0;i<=k;i++) dp[id][i]=0;
if(k==1)
{
for(int i=1;i<n;i++)
{
int fa=id>>i;
if(cho[fa]) dp[id][1]+=w[id][fa];
else dp[id][0]+=f[id][fa];
}
return;
}
cho[id]=0;
dfs(ls,k>>1),dfs(rs,k>>1);
for(int i=0;i<=k>>1;i++)
for(int j=0;j<=k>>1;j++)
dp[id][i+j]=max(dp[id][i+j],dp[ls][i]+dp[rs][j]);
cho[id]=1;//w[i][j]
dfs(ls,k>>1),dfs(rs,k>>1);
for(int i=0;i<=k>>1;i++)
for(int j=0;j<=k>>1;j++)
dp[id][i+j]=max(dp[id][i+j],dp[ls][i]+dp[rs][j]);
}
int main()
{
read(n),read(m);
int k=1<<n-1;
for(int i=1;i<=k;i++)
{
int id=k-1+i;
for(int j=1;j<n;j++)
read(w[id][id>>j]);//<=m
}
for(int i=1;i<=k;i++)
{
int id=k-1+i;
for(int j=1;j<n;j++)
read(f[id][id>>j]);
}
dfs(1,k);
int ans=0;
for(int i=0;i<=m;i++) ans=max(ans,dp[1][i]);
printf("%d\n",ans);
return 0;
}

2019.2.25

「JLOI2015」战争调度 解题报告的更多相关文章

  1. 「JLOI2015」骗我呢 解题报告?

    「JLOI2015」骗我呢 这什么神仙题 \[\color{purple}{Link}\] 可以学到的东西 对越过直线的东西翻折进行容斥 之类的..吧? Code: #include <cstd ...

  2. 「JLOI2015」城池攻占 解题报告

    「JLOI2015」城池攻占 注意到任意两个人的战斗力相对大小的不变的 可以离线的把所有人赛到初始点的堆里 然后做启发式合并就可以了 Code: #include <cstdio> #in ...

  3. 「JLOI2015」管道连接 解题报告

    「JLOI2015」管道连接 先按照斯坦纳树求一个 然后合并成斯坦纳森林 直接枚举树的集合再dp一下就好了 Code: #include <cstdio> #include <cct ...

  4. 「JLOI2015」战争调度

    题目 [内存限制:256 MiB][时间限制:1000 ms] [标准输入输出][题目类型:传统][评测方式:文本比较] 题目描述 脸哥最近来到了一个神奇的王国,王国里的公民每个公民有两个下属或者没有 ...

  5. 【LOJ】#2111. 「JLOI2015」战争调度

    题解 记录一个数组dp[i][S][k]表示第i个点,它上面所有的点的状态(参军或者后勤)可以用状态S来表示,一共有k个平民参军的最大收益,当然数组开不下,可以用vector动态开 我们对于每个平民枚 ...

  6. 「FJOI2016」神秘数 解题报告

    「FJOI2016」神秘数 这题不sb,我挺sb的... 我连不带区间的都不会哇 考虑给你一个整数集,如何求这个神秘数 这有点像一个01背包,复杂度和值域有关.但是你发现01背包可以求出更多的东西,就 ...

  7. 「ZJOI2016」大森林 解题报告

    「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操 ...

  8. 「SCOI2016」背单词 解题报告

    「SCOI2016」背单词 出题人sb 题意有毒 大概是告诉你,你给一堆n个单词安排顺序 如果当前位置为x 当前单词的后缀没在这堆单词出现过,代价x 这里的后缀是原意,但不算自己,举个例子比如abc的 ...

  9. 「NOI2015」寿司晚宴 解题报告

    「NOI2015」寿司晚宴 这个题思路其实挺自然的,但是我太傻了...最开始想着钦定一些,结果发现假了.. 首先一个比较套路的事情是状压前8个质数,后面的只会在一个数出现一次的再想办法就好. 然后发现 ...

随机推荐

  1. CodeForces Round #529 Div.3

    http://codeforces.com/contest/1095 A. Repeating Cipher #include <bits/stdc++.h> using namespac ...

  2. docker技术之基本命令

    我们使用基本命令之前,先来普及一下操作中使用的基本概念 镜像   image 容器   container 仓库   repository 镜像 Docker 镜像是一个特殊的文件系统,除了提供容器运 ...

  3. Tomcat异常及解决办法——持续更新中

    公司项目,开发语言为java,中间件为Tomcat,运行过程中,从Tomcat出现了一些异常,现将异常及解决办法记录如下,仅供参考.(不断在补充中.......) 异常一: 1.日志内容 org.ap ...

  4. CLOUD计算产品成本嵌套

    1.产品入库单入库的半成品A (无单价) 2.其他出库单上(共耗的)出库的半成品A(无单价) 不管在同车间还是不同车间内都是认定为嵌套的,所以可以计算2遍成本,第1遍不考虑嵌套,第2遍就能计算进去了.

  5. Your branch is ahead of 'origin/master' by 2 commits.

    遇到这种问题,表示在你之前已经有2个commit而没有push到远程分支上,所以需要先git push origin **将本地分支提到远程仓库.也可以直接git reset --hard HEAD~ ...

  6. Flutter的scope_model使用mixin语法报错

    在pubspec.yaml同级目录下创建analysis_options.yaml文件,内容: # https://www.dartlang.org/guides/language/analysis- ...

  7. WEX5中ajax跨域访问的几种方式

    1.使用jsonp方式 使用jsonp访问的话,前端需要把回调函数名传递给后端,后端执行完后也需要把回调函数传回给前端,默认情况下ajax自动生成一个回调函数名,后端可以通过String callba ...

  8. pip 升级

    pip install --upgrade qrcode pip install --upgrade qrcode==5.3

  9. CSS 的三种样式 内联 内部 外部

    CSS:层叠样式表的缩写 就是 Cascading Style Sheets Cascading Style Sheets : 层叠样式表 优先级问题 :遵守就近原则  内联> 内部>外部 ...

  10. Bootstrap之登陆页面范例

    代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta ...