[ABC263F] Tournament
Problem Statement
$2^N$ people, numbered $1$ to $2^N$, will participate in a rock-paper-scissors tournament.
The tournament proceeds as follows:
- The participants are arranged in a row in the order Person $1$, Person $2$, $\ldots$, Person $2^N$ from left to right.
- Let $2M$ be the current length of the row. For each $i\ (1\leq i \leq M)$, the $(2i-1)$-th and $(2i)$-th persons from the left play a game against each other. Then, the $M$ losers are removed from the row. This process is repeated $N$ times.
Here, if Person $i$ wins exactly $j$ games, they receive $C_{i,j}$ yen (Japanese currency). A person winning zero games receives nothing. Find the maximum possible total amount of money received by the $2^N$ people if the results of all games can be manipulated freely.
Constraints
- $1 \leq N \leq 16$
- $1 \leq C_{i,j} \leq 10^9$
- All values in input are integers.
Input
Input is given from Standard Input in the following format:
- $N$
- $C_{1,1}$ $C_{1,2}$ $\ldots$ $C_{1,N}$
- $C_{2,1}$ $C_{2,2}$ $\ldots$ $C_{2,N}$
- $\vdots$
- $C_{2^N,1}$ $C_{2^N,2}$ $\ldots$ $C_{2^N,N}$
Output
Print the answer.
Sample Input 1
- 2
- 2 5
- 6 5
- 2 1
- 7 9
Sample Output 1
- 15
The initial row of the people is $(1,2,3,4)$.
If Person $2$ wins the game against Person $1$, and Person $4$ wins the game against Person $3$, the row becomes $(2,4)$.
Then, if Person $4$ wins the game against Person $2$, the row becomes $(4)$, and the tournament ends.
Here, Person $2$ wins exactly $1$ game, and Person $4$ wins exactly $2$ games, so they receive $0+6+0+9=15$ yen in total, which is the maximum possible sum.
Sample Input 2
- 3
- 1 1 1
- 1 1 1
- 1 1 1
- 1 1 1
- 1 1 1
- 1 1 1
- 1 1 1
- 1 1 1
这种比赛,我们可以以满二叉树的方式表现比赛的过程。以叶子节点作为每个参赛者。然后对于一棵子树,他的根节点代表整颗子树赛后的获胜者。
我们不能知道这棵树每个节点是哪位参赛者,但我们可以通过这棵树的形式来做 dp。
满二叉树我们可以用线段树类似的方式给每个节点编号。易得,如果一个叶子节点编号为 \(x\),那么他代表第 \(x-2^n\) 号参赛者。一个参赛者赢得场数要从他输的那场的前面算。
定义 \(dp_{i,j}\) 为现在到了第 \(i\) 号节点,这名参赛者参加了 \(i\) 次比赛。转移时我们枚举是左子树的参赛者赢了还是右子树的参赛者赢了就好了。加个记忆化。
想到了代码非常好写。但之前完全没往这棵树上想过。
#include<bits/stdc++.h>
using namespace std;
const int N=17;
int n,c[1<<N][N];
long long dp[1<<N][N];
long long dfs(int x,int y)
{
if(x>=(1<<n))
return c[x^(1<<n)][y];
if(~dp[x][y])
return dp[x][y];
return dp[x][y]=max(dfs(x<<1,y+1)+dfs(x<<1|1,0),dfs(x<<1|1,y+1)+dfs(x<<1,0));
}
int main()
{
memset(dp,-1,sizeof(dp));
scanf("%d",&n);
for(int i=0;i<(1<<n);i++)
for(int j=1;j<=n;j++)
scanf("%d",c[i]+j);
printf("%lld",dfs(1,0));
return 0;
}
[ABC263F] Tournament的更多相关文章
- Codeforces CF#628 Education 8 A. Tennis Tournament
A. Tennis Tournament time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Rock-Paper-Scissors Tournament[HDU1148]
Rock-Paper-Scissors TournamentTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- CF 628A --- Tennis Tournament --- 水题
CF 628A 题目大意:给定n,b,p,其中n为进行比赛的人数,b为每场进行比赛的每一位运动员需要的水的数量, p为整个赛程提供给每位运动员的毛巾数量, 每次在剩余的n人数中,挑选2^k=m(m & ...
- ural 1218. Episode N-th: The Jedi Tournament
1218. Episode N-th: The Jedi Tournament Time limit: 1.0 secondMemory limit: 64 MB Decided several Je ...
- URAL 1218 Episode N-th: The Jedi Tournament(强连通分量)(缩点)
Episode N-th: The Jedi Tournament Time limit: 1.0 secondMemory limit: 64 MB Decided several Jedi Kni ...
- Educational Codeforces Round 13 E. Another Sith Tournament 概率dp+状压
题目链接: 题目 E. Another Sith Tournament time limit per test2.5 seconds memory limit per test256 megabyte ...
- CodeForce 356A Knight Tournament(set应用)
Knight Tournament time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- 遗传算法selection总结-[Fitness, Tournament, Rank Selection]
假设个体(individual)用\(h_i\)表示,该个体的适应度(fitness)为\(Fitness(h_i)\),被选择的概率为\(P(h_i)\). 另外假设种群(population)的个 ...
- 【CF913F】Strongly Connected Tournament 概率神题
[CF913F]Strongly Connected Tournament 题意:有n个人进行如下锦标赛: 1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概 ...
- 【CF878C】Tournament set+并查集+链表
[CF878C]Tournament 题意:有k个项目,n个运动员,第i个运动员的第j个项目的能力值为aij.一场比赛可以通过如下方式进行: 每次选出2个人和一个项目,该项目能力值高者获胜,败者被淘汰 ...
随机推荐
- 解决git出现fatal: detected dubious ownership in repository at XXXXX的错误
在window环境下,使用git命令时报错fatal: detected dubious ownership in repository at XXXXXX,图片如下 解决方法如下 添加一行代码 gi ...
- Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!
关注TechLeadCloud,分享互联网架构.云服务技术的全维度知识.作者拥有10+年互联网服务架构.AI产品研发经验.团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师, ...
- 我的新书《Flink大数据分析实战》出版啦
- 制作一个内部的 zabbix-agent 快速部署脚本
下载官方的基础 agent 部署包 官方地址:点击到达 curl -O https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.36/zabbix_ ...
- Skynet通讯遇到的奇怪问题
问题 最近在做一个内部通讯的服务器, 用的自带的gateserver和socketchannel做通讯, 在使用skynet.unpack或者string.unpack("XXXX" ...
- dedebiz 清理冗余废弃未引用图片方法
原理描述: 在原有织梦后台菜单中增加"清理冗余图片按钮",实现清理冗余图片的功能. 操作步骤: 1. 打开后台admin\sys_sql_query.php代码 在该文件中搜索如下 ...
- iptables和firewalld
iptables简介 iptables不是一个单一的软件工具,而是一套c/s样式的软件组,它是由工作在用户空间的iptables和工作在内核空间的vetilter模块组成,一般统称为Iptables. ...
- Harry Potter RPG_1
RPG--Harry Potter 博主最近迷上了<Harry Potter> So 我制作了一款RPG对话模拟游戏, 目前主线以进行到了分院以后: 有兴趣的小伙伴可以看看,能点个关注就更 ...
- MySQL实战实战系列 07 行锁功过:怎么减少行锁对性能的影响?
在上一篇文章中,我跟你介绍了 MySQL 的全局锁和表级锁,今天我们就来讲讲 MySQL 的行锁. MySQL 的行锁是在引擎层由各个引擎自己实现的.但并不是所有的引擎都支持行锁,比如 MyISAM ...
- Oracle查询--增加--删除--修改主键
对Oracle表主键的操作,有四类:查询,增加,修改,删除 1.查询主键 /*查询某个表中存在的约束*/ select * from user_constraints where table_name ...