[TK] 矩阵取数游戏<简单版> hzoi-tg-906-2
1.[TK] 矩阵取数游戏<简单版> hzoi-tg-906-2
2.[TK] 一心净士 hzoj-tg-937-23.[TK] 盖房子 hzoi-tg#2624.[TK] 三角蛋糕 hzoi-tg#2615.[TK] 选课 hzoj-tg#2796.[TK] 三色二叉树 hzoi-tg#282 存图方法7.[TK] HH的项链 离线树状数组解法8.[TK] 理想的正方形9.[TK] Blocks 单调栈10.[TK] 送礼物11.[TK] Terrible Prime12.[TK] BLO13.[TK] Rudolf and Subway ( CodeForces #933 div.3 - G )14.[TK] Bulls And Cows S15.[TK] 颜色16.[Tkey] 与非17.[TK] CF1526B I Hate 111118.[TK] 寻宝游戏19.[CL-22] 异或和之和20.联训题单 / 集训杂题纪要21.[At_dp_w] Intervals & [At_dp_x] Tower22.CF2023D - Many Games23.[NOI2021] 轻重边24.[CSP-S 2024] 染色本题是一个坐标DP问题
状态转移
首先我们注意到,一个状态只能由两种前置状态得到:取左边的数和取右边的数,因此我们以状态为阶段定义如下:
根据上述推论,可以得出状态转移方程:
其中上面的转移式是取右边的数,下面的转移式是取左边的数.
细节处理
1.结果输出
我们可以发现,在拿走
我们可以直接找出所有
2.计算
不难发现,本题中
代码实现
假如你是来抄代码的 建议你动点脑子理解一下上面的东西 这里只给出伪代码
for(int i=1;i<=n;++i){ //预处理
base[i]=base[i-1]*2;
}
for(int i=1;i<=n;++i){
cin>>y[i];
}
for(k:1~n-1){
for(i:1~n){
for(j:1~n){
f[k][i][j]=max(f[k-1][i][j+1]+y[j+1]*base[k],f[k-1][i-1][j]+y[i-1]*base[k]);
}
}
}
for(i:1~n){
ans=max(f[n-1][i][i]+y[i]*base[n],ans);
}
}
//别忘了开long long
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!