尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

luogu-P1544 三倍经验题解

luogu-P1544 三倍经验题解
📅 发布时间:2026/6/20 11:32:55

传送门

记忆化搜索

点击查看代码
#include<bits/stdc++.h>
using namespace std; 
using LL=long long;  // 定义长整型别名
constexpr int N=110;  // 定义最大行数LL a[N][N];          // 存储数字金字塔
LL f[N][N][N];       // 记忆化数组,f[i][j][p]表示从(i,j)位置出发,还剩p次使用3倍机会时的最大得分
bool vis[N][N][N];   // 标记数组,记录状态是否已经计算过
int n,k,ans;         // n:行数,k:最大3倍次数,ans:最终答案// 深度优先搜索函数
// 参数:i-当前行,j-当前列,p-已使用的3倍次数
LL dfs(int i,int j,int p)
{// 边界条件检查:超出金字塔范围或使用次数超过限制if(i<0||i>n||j<0||j>n||p>k) return 0;// 如果当前状态已经计算过,直接返回结果if(vis[i][j][p]) {return f[i][j][p];}else{// 如果还有使用3倍的机会if(p!=k){// 选择左下方向并使用3倍机会f[i][j][p]=max(f[i][j][p],dfs(i+1,j,p+1)+3*a[i][j]);// 选择右下方向并使用3倍机会f[i][j][p]=max(f[i][j][p],dfs(i+1,j+1,p+1)+3*a[i][j]);}// 不使用3倍机会的情况// 选择左下方向f[i][j][p]=max(f[i][j][p],dfs(i+1,j,p)+a[i][j]);// 选择右下方向f[i][j][p]=max(f[i][j][p],dfs(i+1,j+1,p)+a[i][j]);// 标记当前状态已计算vis[i][j][p]=true;return f[i][j][p];}
}int main()
{// 输入行数和最大3倍次数scanf("%d%d",&n,&k);// 输入数字金字塔for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){cin>>a[i][j]; }}// 初始化记忆化数组为负无穷(因为可能有负数)memset(f,-0x3f,sizeof(f));// 从金字塔顶部(1,1)开始,当前使用0次3倍机会ans=dfs(1,1,0);// 输出最大得分printf("%lld",ans);return 0; 
}

动态规划写法

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 105; 
int n, k;
ll a[N][N], dp[N][N][5505], maxm = -3e9;
signed main()
{//输入 ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> n >> k;//初始化 for(int i = 1; i <= n; ++ i)for(int j = 0; j <= n; ++ j)for(int l = 0; l <= k; ++ l)dp[i][j][l] = -3e9; //a[i][j]最小是-1e9,还要乘3,所以设为-3e9(记得开long long)。 //边输入边做dp for(int i = 1; i <= n; ++ i)for(int j = 1; j <= i; ++ j){cin >> a[i][j];for(int l = 0; l <= k && l <= i; ++ l){if(l == 0)dp[i][j][l] = max(dp[i - 1][j][l], dp[i - 1][j - 1][l]) + a[i][j];else{dp[i][j][l] = max(dp[i - 1][j][l], dp[i - 1][j - 1][l]) + a[i][j];dp[i][j][l] = max(dp[i][j][l], max(dp[i - 1][j][l - 1], dp[i - 1][j - 1][l - 1]) + a[i][j] * 3);}}}k = min(k, n); // 不然可能导致没搜到k次,值为-3e9的情况。//搜索答案 for(int j = 1; j <= n; ++ j)for(int l = 0; l <= k; ++ l)maxm = max(maxm, dp[n][j][l]);//输出 cout << maxm;return 0;
}

相关新闻

  • 2025年靠谱的动物雕塑优质厂家推荐榜单
  • NOIP2025 倒数第14场模拟赛 赛后总结
  • 2025/11/4

最新新闻

  • 本地AI Agent选型指南:无GPU、断网、零运维场景下的四大框架实测
  • Legacy iOS Kit终极指南:免费解锁旧iPhone/iPad完整控制权
  • 五艘无人艇分布式围捕编队控制仿真研究(Matlab代码实现)
  • Windows苹果设备驱动安装终极指南:3步实现iPhone网络共享
  • 2026六盘水防水补漏避坑指南:卫生间/厨房/阳台/屋顶/地下室漏水检测维修全攻略,正规施工+透明报价+口碑榜靠谱服务商推荐 - 安佳防水
  • emWin控件API实战:BUTTON与CHECKBOX的设计哲学与高级应用

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号