AT_abc263_f [ABC263F] Tournament 题解
分析
一眼 DP。
定义状态函数
可以预处理出来
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define re register
#define il inline
const int N=2e5+10,M=20;
int n,c[N][M];
map<int,int> f[N];
int lson[N],rson[N];
vector<int> ve[N];
int dep[N];
il void solve(){
cin>>n;
for(re int i=1;i<=pow(2,n);++i)
for(re int j=1;j<=n;++j)
cin>>c[i][j];
for(re int i=pow(2,n+1)-1;i>1;--i){
if(i&1) lson[i/2]=i;
else rson[i/2]=i;
}
int nowdep=1,lst=pow(2,n-1);
for(re int i=pow(2,n)-1;i>=1;--i){
if(!lst) ++nowdep,lst=pow(2,n-nowdep);
dep[i]=nowdep;
--lst;
}
for(re int i=pow(2,n+1)-1,k=1;i>=pow(2,n+1)-1-pow(2,n)+1;--i,++k) ve[i].push_back(k);
for(re int i=pow(2,n)-1;i>=1;--i){
int maxlson=0,maxrson=0;
for(re int j=0;j<ve[lson[i]].size();++j){
int x=ve[lson[i]][j];ve[i].push_back(x);
maxlson=max(maxlson,f[lson[i]][x]);
}
for(re int j=0;j<ve[rson[i]].size();++j){
int x=ve[rson[i]][j];ve[i].push_back(x);
maxrson=max(maxrson,f[rson[i]][x]);
}
for(re int j=0;j<ve[lson[i]].size();++j){
int x=ve[lson[i]][j];
f[i][x]=max(f[i][x],f[lson[i]][x]-c[x][dep[lson[i]]]+c[x][dep[i]]+maxrson);
}
for(re int j=0;j<ve[rson[i]].size();++j){
int x=ve[rson[i]][j];
f[i][x]=max(f[i][x],f[rson[i]][x]-c[x][dep[rson[i]]]+c[x][dep[i]]+maxlson);
}
}
int maxx=0;
for(re int i=1;i<=pow(2,n);++i) maxx=max(maxx,f[1][i]);
cout<<maxx;
return ;
}
signed main(){
solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!