当前位置: 首页 > news >正文

leetcode 困难题 1406. Stone Game III 石子游戏 III

Problem: 1406. Stone Game III 石子游戏 III

两种方案的

方案1是记忆化深度优先搜索,方案2是动态规划

记忆化深度优先搜索,函数dfs返回两者分数的最大差值,也就是两者分数差值越大越好,一般来讲需要最大化Alice或者Bob的分数,最大化Alice分数的同时需要最小化Bob的分数,最大化Bob分数的同时需要最小化Alice的分数

所以求出分数sum以后,sum - dfs(stoneValue, i + 1),dfs表示对手分数的最大值差值,加上负号-,也就是最大化当前player的分数最小化对手的分数

满足博弈论的最优化选择,使用了记忆化搜索

方案1 Code

class Solution { public: int n; unordered_map<int, int> ump; int dfs(vector<int>& stoneValue, int start) { if(start >= n) return 0; if(ump.count(start) != 0) return ump[start]; int sum = 0, r = min(start + 3, n), mx = INT_MIN, ret; for(int i = start; i < r; i++) { sum += stoneValue[i]; ret = sum - dfs(stoneValue, i + 1); mx = max(ret, mx); } ump[start] = mx; return mx; } string stoneGameIII(vector<int>& stoneValue) { n = stoneValue.size(); int ans = dfs(stoneValue, 0); if(ans > 0) return "Alice"; else if(ans==0) return "Tie"; else return "Bob"; } };

方案2,dp[i]表示从stoneValue[i]到stoneValue.back()两者分数的最大差值,不管谁先谁后,从后向前,初始化dp[n]=0, dp[n-1] = stoneValue.back();

然后递推公式是:dp[i] = max(dp[i], sum - dp[j+1]);,sum就是当前player拿到的分数,dp[j+1]是对手拿到的分数最大差值,两者的差值要最大化

方案2 Code

class Solution { public: int n; string stoneGameIII(vector<int>& stoneValue) { n = stoneValue.size(); vector<int> dp(n+1, INT_MIN); dp[n] = 0; dp[n-1] = stoneValue.back(); for(int i = n-2; i >= 0; i--) { int sum = 0, r = min(n, i + 3); for(int j = i; j < r; j++) { sum += stoneValue[j]; dp[i] = max(dp[i], sum - dp[j+1]); } } int ans = dp[0]; if(ans > 0) return "Alice"; else if(ans==0) return "Tie"; else return "Bob"; } };
http://www.jsqmd.com/news/494323/

相关文章:

  • sql性能分析和sql优化
  • Matlab实用指南:一键运行15种回归基础模型全家桶,涵盖ANN、RNN等高级模型,中文注释...
  • StructBERT文本相似度模型在网络安全中的应用:恶意文本与钓鱼内容识别
  • 2026年质量好的纸尿裤公司推荐:婴儿纸尿裤/内裤式纸尿裤/粘贴式纸尿裤生产厂家推荐 - 品牌宣传支持者
  • 2026 SiteGround 官网人工在线客服聊天指南
  • eNSP web方式防火墙透明模式配置
  • 高通 QCS8550 边缘智能实践:基于 Qwen2.5-7B 与 Agent+RAG 构建本地化知识助手
  • leetcode 1408. String Matching in an Array 数组中的字符串匹配-耗时100
  • c++基础+类和对象
  • 基于单矢量控制的永磁同步电机模型预测电流控制Simulink仿真模型 对应学习资料: 1
  • 文墨共鸣模型效果惊艳展示:多风格长文本创作集锦
  • 团队协作只能靠“在线文档”?大错特错!2026 年企业网盘“硬核协作”能力横评
  • 27.3k stars!Fish Speech:开源 TTS 的天花板,10 秒克隆任意声音!
  • 家庭网络小白必看:为什么你的手机和电脑能直接传文件?揭秘同一网段通信的底层逻辑
  • SAP Fiori Launchpad 全景解析:从统一入口到角色化工作台,再到移动端落地实践
  • 题解:P11062 【MX-X4-T2】「Jason-1」加法
  • Grok‑3‑Fast 落地选型与部署方案
  • Asian Beauty Z-Image Turbo实战:如何用结构化提示词生成有故事感的东方人像
  • Excel 实战技巧:利用 OFFSET 统计 “标识行” 下方的数值总和
  • 二叉树的构造、合并与二叉搜索树
  • message-api(WebSocket)消息推送:持久/非持久、已读回写、未读重推全链路解析(含双 Kafka、Redis、TiDB、BloomFilter)
  • 基于改进蛇优化算法(GOSO/ISO)优化极限梯度提升树的数据回归预测(GOSO/ISO-XG...
  • yz-bijini-cosplay多模态实践:文本到图像生成效果展示
  • 为什么你的 Agent 总是“断片”?
  • 密码安全那些事:从明文到 SHA-256 到 BCrypt,为什么一步步升级
  • C++多态:动态行为的核心奥秘
  • 数字电子技术题目
  • 2026年口碑好的纸尿裤工厂推荐:腰贴式纸尿裤/开合式纸尿裤口碑好的厂家推荐 - 品牌宣传支持者
  • 国际大厂德州仪器CC1101无线芯片反向电路学习指南:低功耗传输于ISM频段,模块丰富适合学习...
  • 苍穹外卖Day8 (地址簿 用户下单 功能支付)