leetcode之博弈问题

华为硬件工程师笔试题 1、基尔霍夫定理的内容是什么?(仕兰微电子)   基尔霍夫定理包括电流定律和电压定律。   电流定律(KCL):在集总电路中,任何时刻,对任一结点,所有流出结点的支路电流的代数和恒等于零。   电压定律(KVL):在集总电路中,任何时刻,沿任一回路,所有支路电压的代数和恒等于零。   2、平板电容公式(C=εS/4πkd)。(未知)   3、最基本的如三极管曲线特性。(未知)   4、描述反馈电路... 阅读详情

leetcode 之博弈问题

亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。

游戏以谁手中的石子最多来决出胜负。石子的总数是奇数,所以没有平局。

亚历克斯和李轮流进行,亚历克斯先开始。 每回合,玩家从行的开始或结束处取走整堆石头。 这种情况一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜。

假设亚历克斯和李都发挥出最佳水平,当亚历克斯赢得比赛时返回 true ,当李赢得比赛时返回 false 。

输入:[5,3,4,5]
输出:true
解释:
亚历克斯先开始,只能拿前 5 颗或后 5 颗石子 。
假设他取了前 5 颗,这一行就变成了 [3,4,5] 。
如果李拿走前 3 颗,那么剩下的是 [4,5],亚历克斯拿走后 5 颗赢得 10 分。
如果李拿走后 5 颗,那么剩下的是 [3,4],亚历克斯拿走后 4 颗赢得 9 分。
这表明,取前 5 颗石子对亚历克斯来说是一个胜利的举动,所以我们返回 true 。

分析问题:

1.问题的[状态]也就是变量是什么
状态有,在哪一个区间那石头,先拿还是后拿
  1. 所以我们让:dp[i][j].first表示在[i,j]区间上,先拿得到的最大的石子数; dp[i][j].second表示在[i,j]区间后拿能拿到的最大的石子数;

  2. [选择,择优]:选择就是先拿左边的还是右边的,哪一边获得的结果大我们就选择哪一边

left=dp[i+1][j].second+piles[i];    //先拿左边能得到的最大子数
right=dp[i][j-1].second+piles[j];   //先拿右边所能够拿到的最大石子数
  1. base case: dp[i][i].first=piles[i] 其他都为0 (很好理解)

最后写出程序:

![调整大小位置](/home/zhongsy/Desktop/cotek_rb/调整大小位置.png)class Solution {
public:
    struct a
    {
        int first;
        int second;
        a(int c,int d):first(c),second(d){}
    };

    bool stoneGame(vector<int>& piles) {
        int n=piles.size();
        vector<vector<a>> dp(n,vector<a>(n,a(0,0)));
        for(int i=0;i<n;i++)
        {
            dp[i][i].first=piles[i];
        }
        cout<<dp[n-1][n-1].first<<dp[n-1][n-1].second<<endl;
        for(int i=n-2;i>=0;i--)
        {
            for(int j=i+1;j<n;j++)
            {
                //先手选择最左边或者最右边的分数
                int left=piles[i]+dp[i+1][j].second;
                int right=piles[j]+dp[i][j-1].second;
                if(left>right)
                {
                    dp[i][j].first=left;
                    dp[i][j].second=dp[i+1][j].first;
                }
                else
                {
                    dp[i][j].first=right;
                    dp[i][j].second=dp[i][j-1].first;
                }

                
            }
        }
        cout<<dp[0][n-1].first<<endl;
        cout<<dp[0][n-1].second<<endl;
        return (dp[0][n-1].first>dp[0][n-1].second)?true:false;

    }
};

在这里插入图片描述

【Python基础】FastAPI 从入门到项目实战操作详解 【Python基础】FastAPI从入门到使用实战操作详解 阅读详情

相关推荐

SAP SD跨公司销售IDOC自动记账配置实战指南

本文详细介绍了SAP SD模块中跨公司销售IDOC自动记账的配置实战指南。通过IDOC技术实现集团企业间交易的自动化处理,显著提升财务效率和准确性。文章涵盖前置配置、RFC连接、合作伙伴参数设置及财务科目分配等关键步骤,并提供了常见错误排查和性能优化建议,帮助用户快速掌握这一高效业务流程。

weixin_29284885的博客 770

LeetCode 5024 除数博弈 --(简单博弈论)

今天在LeetCode的看到一到题目 这道题目有点坑,没有思路的话容易钻牛角。 刚刚开始时,我想的是直接用while循环来模拟计算,后来觉得这么好麻烦,也有复制的逻辑在里面。后面我推导了一下 以下是我的推导过程,爱丽丝简称 A 鲍勃 简称B 当num=2时,A=1-->num=num-1=1,A赢 当num=3时,A只能出1,-->num=num-1=2,此时B正好处于num...

arnoq08806的专栏 208

DSP28335笔记——内部Flash中进行数据读写(Flash_API的使用)

Program时的报错返回值较为常见,对返回值30、31进行详解:返回值为30:每次操作写入16位的字节,直到Buffer中的数据全部写入,若写入的数据位超过16位时则返回值30。返回值为31:表示尝试将已有数据位上的0写成1。一般情况下,在Program操作之前,会将指定部分中的数据进行擦除;但擦除函数执行时间较久,且只能以扇区为单位进行擦除,因此也可以在已有数据的基础上再进行Program,但无法将已有数据的位中的0值写成1。

m0_46621336的博客 8750

LeetCode - 486. Predict the Winner(排成一条线的纸牌博弈问题)

LeetCode-486. Predict the Winner(排成一条线的纸牌博弈问题) 题意 暴力递归解法 动态规划解法 题目链接 题意 给定一个表示分数的非负整数数组。 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端拿取分数,然后玩家1拿,……。每次一个玩家只能拿取一个分数,分数被拿取之后不再可取。直到没有剩余分数可取时游戏结束。最终获得分...

zxzxin的博客~ 1559

【ros】ROS1的安装和相关使用方法

主要学习ros相关内容

Greary的博客 2379

uniapp [全端兼容] - 详细实现全局修改设置字体大小功能效果,统一修改页面字号字体大小,一键改变字号整个项目立即生效,大中小字号预设、老年人大字模式场景,uniApp全平台兼容控制页面字号大小

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,修改字体大小,一键调整UniApp字体大小,实时改变不用刷新,动态设置字体大小,uniapp全局修改字体字号大小,如何控制全局字号,可调整显示的字体,全项目生效,老年人大字模式,改变所有页面的字体,全局设置字体大小,实现小中大的字体切换,设置改变全局字体大小功能,如何做到全平台兼容,H5APP实现全局字体大小调整,不兼容报错,用户设置字号,全局设置应用字体大小,大中小字体修改,页面设置page-me

🏆 前端领域优质创作者 1万+

Leetcode 纸牌博弈:区间递增动态规划

题目描述 给定一个整型数组arr,代表数值不同的纸牌排成一条线,玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿,但是每个玩家每次只能拿走最左和最右的纸牌,玩家A和玩家B绝顶聪明。请返回最后的获胜者的分数。 输入 4 1 2 100 4 输出 101 基本思路 容易知道,当只有一张牌时,先拿的那个人获得这张牌的分数,后拿的人获得0分。 进一步,若有arr[n]张牌,那么先拿的人可能有两种选择。 拿第一张牌+剩下的牌中其为后拿牌的人 拿最后一张牌+剩下的牌中其为后拿的人 因此问题的动态规划方程为

一只老风铃 1190

在 RAP 里把编号这件事做得既优雅又合规:Early Numbering 与 Late Numbering 的落地指南

本文探讨了 SAP RAP 框架中的三种主键编号策略及其适用场景。文章首先指出传统 ABAP 应用中主键处理的局限性,详细分析了早期编号(外部/内部)和延迟编号的差异,强调延迟编号在避免业务断号方面的优势。通过 Partner 业务对象案例,文章演示了延迟编号的实现方法,包括行为定义配置、保存类实现和编号分配逻辑。同时指出测试中常见的校验陷阱,并提醒生产环境应避免简单的 MAX+1 方案,建议采用原子取号机制确保并发安全。全文从业务合规性和技术实现两个维度,为 RAP 应用的编号策略选择提供了实用指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1846

【LeetCode】除数博弈

爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字n。x0 < x < nn % x == 0n - xn如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回true。假设两个玩家都以最佳状态参与游戏。n = 2true爱丽丝选择 1,鲍勃无法进行操作。n = 3false爱丽丝选择 1,鲍勃也选择 1,然后爱丽丝无法进行操作。

zzxz8的博客 350

2026 AI浏览器Agent终极对比:BrowserAct、agentBrowser、PP-Browser 谁更适合落地?(安装+实战+场景全覆盖)

1.不要盲目追求最新框架:很多人跟风用agentBrowser,结果业务是多步骤复杂办公流程,反而不如BrowserAct稳定;2.风控场景优先PP-Browser:但凡需要登录账号、频繁访问正规平台,无脑选PP-Browser,能避开99%的封禁问题;3.AI批量解析优先agentBrowser:做知识库爬取、网页内容总结、批量问答,省Token就是省成本,长期使用性价比碾压另外两者;4.个人开发调试优先BrowserAct:容错高、日志全、调试简单,新手上手最快,不容易报错翻车。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 335

Python进阶005:修改Jupyter Notebook的工作路径

1、Jupyter Notebook简介 2、修改Jupyter Notebook的工作路径 如下三个步骤: 一、安装notebook 在CMD命令行中输入: pip install notebook 二、启动notebook jupyter notebook 启动后发现是在你的用户目录下,如下图所示,但是该目录下有很多的其他文件或文件夹,因此我想把这个环境切换到我单门创建的一个文件夹中。 三、创建notebook的配置文件 在CMD命令行中执行: jupyter notebook --genera

若北辰 1386

[LeetCode]动态规划求解博弈问题

博弈论是有趣又有用的知识,可以用来预测在特定的规则下,人们会做出怎样的行为,又会导致怎样的结果。利用博弈论来指导人们的行事法则甚至商业操作,比如著名的囚徒困境就被很好的利用在了商业竞争上。同样,LeetCode也利用博弈论出了几道有意思的题目。 如何解这些博弈类的算法题目呢?如果透过题目表面,理清题目的本质,那么题目可能就是一道数学题。当然了,也可以用正儿八经的算法来求解。本文Jungle将使用...

冯Jungle的个人博客 2706

k8s配置habor作为镜像地址之后,如果harbor中没有镜像,如何设置自动从阿里云官方镜像仓库下载

通过 Harbor 的远端仓库可以集中管理。如果你在上游设置了 image prefix 为 library,那么对外访问 harbor.your-domain.com/library/nginx:latest 就会被 Harbor 去上游拉取 registry.cn-hangzhou.aliyuncs.com/library/nginx:latest 并缓存。- 将集群中的镜像地址改为 Harbor 的域名,比如 harbor.your-domain.com/library/nginx:latest。

极客栈 426

leetcode 博弈问题总结

leetcode 博弈问题总结类型一.区间博弈问题:背景:解题套路1.求前缀和2.定义dp区间[L][R]来记忆化dfs;3.定义dfs(区间[L,R])为我在这个区间中能拿到的最大值877. 石子游戏题解486. 预测赢家题解类型二.给定增量和最终结果背景解题套路1.无限制条件2.限制条件:每次拿/放m个:m不能重复292. Nim 游戏题解464. 我能赢吗题解: 类型一.区间博弈问题: 背景: 给定数组piles,我和你玩一个游戏: 每次只能从数组的两端拿东西,我先拿,问能不能赢? 解题套路 1.求

qq_41202486的博客 802

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

当C++遇上LeetCode——博弈问题

文章目录题目引入题目:除数博弈——LeetCode第132场周赛第一题我的题解简单分析参考文章数学时间一个公式推导过程在数学&博弈中的扩展倒推思想一个经典的倒推问题(强盗分金)问题描述答案分析后记 题目引入 题目:除数博弈——LeetCode第132场周赛第一题 5024.除数博弈 爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。 最初,黑板上有一个数字 N 。在每个玩家的回合,玩家...

KevinAshen的博客 540

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【LeetCode】292. Nim 游戏 博弈论问题

文章是转载的,第一次遇见,记录一下 来自 https://leetcode-cn.com/problems/nim-game/solution/li-jie-bo-yi-wen-ti-zhong-bi-sheng-tai-he-bi-bai-t/ 刷题中常见的博弈问题,本质就是先手通过一系列操作,进来把当前状态变成对后手不利的状态。 由于选手足够聪明和规则巧妙设计,先手在给出的状态下总是必胜或者必败的。 必败态和必胜态的定义: 必胜态:如果一个状态的后继状态中存在必败态,那么这种该状态下,先手必胜。 必.

GEEK-BANANA 304

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

2023-04-26 力扣LeetCode上的DP动态规划问题分类汇总

所有线性递推关系都可以用矩阵快速幂做,可以O(logN),最典型是斐波那契数列。计数型DP都可以以组合数学的方法写出组合数,然后dp求组合数。本质是 dfs + 记忆化,用在状态的转移方向不确定的情况。策梅洛定理,SG 定理,minimax。

lsgwr的博客 801

从石头游戏到算法竞赛:用Python实战巴什博弈,搞定LeetCode上的取石子问题

本文深入解析巴什博弈(Bash Game)在算法竞赛中的应用,通过Python实战演示如何解决LeetCode上的取石子问题。从核心公式推导到动态规划解法,帮助读者掌握博弈论中的必胜态与必败态判断,提升算法竞赛解题效率。

weixin_30633405的博客 369

动态规划-博弈问题-力扣877-石子游戏

亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子piles[i]。游戏以谁手中的石子最多来决出胜负。石子的总数是奇数,所以没有平局。亚历克斯和李轮流进行,亚历克斯先开始。 每回合,玩家从行的开始或结束处取走整堆石头。 这种情况一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜。假设亚历克斯和李都发挥出最佳水平,当亚历克斯赢得比赛时返回true,...

Sun_Dean的博客 667

LeetCode129--除数博弈、三步问题、按摩师

1、除数博弈 //爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。 // // 最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作: // // // 选出任一 x,满足 0 < x < N 且 N % x == 0 。 // 用 N - x 替换黑板上的数字 N 。 // // // 如果玩家无法执行这些操作,就会输掉游戏。 // // 只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 False。假设两个玩家都以最佳状态参与游戏。 //

qq_40971025的博客 198

【LeetCode: 292. Nim 游戏+ 博弈问题】

【LeetCode: 292. Nim 游戏+ 博弈问题】你和你的朋友,两个人一起玩 Nim 游戏: - 桌子上有一堆石头。 - 你们轮流进行自己的回合, 你作为先手 。 - 每一回合,轮到的人拿掉 1 - 3 块石头。 - 拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。

Coder_ljw的博客 1217

开学回归力扣:第九题——1025. 除数博弈(动态规划解决博弈问题)

1025. 除数博弈 爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。 最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N % x == 0 。 用 N - x 替换黑板上的数字 N 。 如果玩家无法执行这些操作,就会输掉游戏。 只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 False。假设两个玩家都以最佳状态参与游戏。 示例 1: 输入:2 输出:true 解释:爱丽丝选择 1,鲍勃无法进行操作。 示例 2

xiangguang_fight的博客 1014

LeetCode算法:1025. 除数博弈(怀疑算法有问题)

为什么怀疑呢?是因为官方的数学推论与归纳总结的解法,我发现了一个从n=4的时候,就与结论的解法结果不一致,但官方的解法却盘为正确,故而怀疑算法有问题或算法题本身有问题?

qq_24691007的博客 300

LeetCode-1406-DP博弈问题应用

1406. 石子游戏 III Alice 和 Bob 用几堆石子在做游戏。几堆石子排成一行,每堆石子都对应一个得分,由数组 stoneValue 给出。 Alice 和 Bob 轮流取石子,Alice 总是先开始。在每个玩家的回合中,该玩家可以拿走剩下石子中的的前 1、2 或 3 堆石子 。比赛一直持续到所有石头都被拿走。 每个玩家的最终得分为他所拿到的每堆石子的对应得分之和。每个玩家的初始分数都是 0 。比赛的目标是决出最高分,得分最高的选手将会赢得比赛,比赛也可能会出现平局。 假设 Alic.

Rnan_prince的博客 508

leetcode1025. 除数博弈

文章目录题目:leetcode1025. 除数博弈基本思想1:动态规划基本思想2:猜想+分析 题目:leetcode1025. 除数博弈 爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。 最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N % x == 0 。 用 N - x 替换黑板上的数字 N 。 如果玩家无法执行这些操作,就会输掉游戏。 只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩

yyf_blog 461

博弈问题-动态规划,leetcode-486预测赢家

博弈问题动态给规划 给你一堆石头,用数组表示,每次只能从左边拿或者右边拿,拿的多的赢,返回最后先手和后手的差值 思路:动态规划 状态dp[i][j][0]表示面对从i到j堆的石头,先手的分数;dp[i][j][1]表示面对从i到j的石堆,后手的分数 转移方程:先手从左边拿,先手就是面对从i+1到j的石堆的后手,即nums[i]+dp[i+1][j][1],后手就变成面对从i+1到j的先手,即dp[i+1][j][0];先手从右边拿,先手就变成了面对从i到j-1的后手,即nums[j]+dp[i][j-1][

大灰狼吃树皮 187
上一篇: leetcode之编辑距离问题
下一篇: Ubuntu16.04 下网易云网络异常解决方法
黑猫爱小鹿
博客等级 码龄8年 1万+粉丝 205原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值