首页 > 其他分享 >AT_abc_270_d 总结

AT_abc_270_d 总结

时间:2023-05-20 20:12:07浏览次数:47  
标签:总结 abc 复杂度 石子 270 le dp

题目:AT_abc_270_d
链接:洛谷, ATvjudge

题意

  • 有两个人轮流取石子,有 \(n\) 颗石子和长度为 \(k\) 的数组 \(a\),每次取石子的人可以取走 \(a_i\) 颗石子,当然当时剩下的石子数量要 $ \ge a_i$ 才行,若二人都走最优策略,那么先手可以取走都少颗棋子?

  • 数据范围:\(1 \le n \le 10^4, 1 \le k \le 100\)。

思路

暴搜

  • 首先我们可以写一个暴力搜索,状态为 \((x, y, 0 / 1)\) 表示取走了 \(x\) 颗棋子,先取石子的人取了 \(y\) 颗,当前位谁取石子(定义 \(1\) 为先手,\(0\) 为后手)。

  • 那么有转移:\((x,y,f) -> (x + a_i, y + a_i \cdot f, f \oplus 1)(1 \le i \le n)\)。

  • 时间复杂度

    • 状态数:\(O(n^2)\)。
    • 转移数:\(O(n^2k)\)。
    • 总时间复杂度:\(O(n^2k)\).

正解

  • 其实这是个博弈题。令 \(dp_{i,f}\) 表示一共取了 \(i\) 个石子,当前操作为 \(f\) 取石子,\(f\) 能得到的最大石子数,那么 \(dp_{i,f} = \max\limits_{j = 1}^k \{x - a_j - dp_{x - a_j}\} = \max\limits_{j = 1}^k \{x - dp_{x - a_j}\}\)。

  • 所以就结束了,但是这个题还有更简单的实现方式,因为两个人都实现的最优策略,所以无需分前后手,可以直接省略后面一维。

  • 时间复杂度

    • 状态数:\(O(n)\)。
    • 转移数:\(O(nk)\)。
    • 总时间复杂度:\(O(nk)\)。

标签:总结,abc,复杂度,石子,270,le,dp
From: https://www.cnblogs.com/xhr0817-blog/p/17417720.html

相关文章

  • 又一个2W+的答题抽奖活动,复盘复盘总结总结
    又一个2W+的答题抽奖活动,复盘复盘总结总结前段时间太忙了,现在才有时间对一些活动进行复盘总结,这里先对其中一个答题抽奖活动进行复盘总结一下。遇到的一些问题、分析以及其解决方案。答题+抽奖参与者每答对一道题既可获得相对应的分数,分数进行累计达到活动规定的分数后即可参与抽奖......
  • AT_abc270_f 总结
    题意有\(n\)个岛屿,可以分别花\(x_i,y_i(1\lei\len)\)的代价在岛屿\(i\)建一个机场和港口,一个花\(z_i(1\lei\lem)\)的代价在\(a_i,b_i\)之间建一条双向道路。若\(x\)和\(y\)都有机场或港口或者有道路相连,那么\(x\)和\(y\)是联通的,问要花至少多少代价......
  • 总结一下常见String类的方法
    String常用方法intlength():返回字符串的长度:returnvalue.lengthcharcharAt(intindex):返回某索引处的字符returnvalue[index]booleanisEmpty():判断是否是空字符串:returnvalue.length==0StringtoLowerCase():使用默认语言环境,将String中的所有字符转换为小写Strin......
  • Windows Server2019网卡桥接与网卡聚合在实际工作中经验总结
    WindowsServer2019网卡桥接与网卡聚合在实际工作中经验总结1、WindowsServer2019网卡桥接与网卡聚合的区别   桥接:只是在服务器端的多个网卡进行桥接,交换机端不能做聚合,在实际工作中,桥接网卡会产MAC地址漂移,如果用MAC地址控制会产生断网故障。(注意:这是服务这边桥接,交换......
  • 背包总结
    01背包题目简介有N件物品和一个容量为V的背包,每件物品有各自的价值且只能被选择一次,要求在有限的背包容量下,装入的物品总价值最大。「0-1背包」是较为简单的动态规划问题,也是其余背包问题的基础。动态规划是不断决策求最优解的过程,「0-1背包」即是不断对第i个物品的做出......
  • 常见前端安全问题总结
    一、XSS攻击全称跨站脚本攻击,简称XSS攻击,攻击者通过在目标网站上HTML注入篡改网页来插入恶意脚本,当用户在浏览网页时获取用户的cookie等敏感信息,进一步做一些其他危害的操作。根据攻击的来源,该攻击还可以分为:1)存储型攻击:一般是在有评论功能的网站将恶意代码当作评论内容存储到......
  • Revit二次开发 知识点总结(表格)
    Revit二次开发知识点总结(表格) 宏Macro概述宏是一种程序,用来实现重复任务的自动化;宏可以执行一系列预定义的步骤,从而完成特定任务;模块是对宏的分组;实际上是一个编程项目;应用程序级的宏:可以在任何文档中使用,可以自行运行;可以独立于Revit运行;可以向Revit添加工具;......
  • 应用系统项目开发过程总结
    一调研阶段a.需求调研:在项目开始之前,需要对目标用户进行调查,了解他们的需求和期望。这包括与潜在用户进行访谈、收集反馈和数据分析等。b.环境调研:目前系统功能,版本,技术类型,接口情况,网络环境,系统环境c.技术调研:预期本项目涉及到的新技术,安排人开始熟悉引入d.开发环境准备......
  • c#Mutex总结
    c#Mutex的用法总结C#多线程系列之进程同步Mutex类......
  • 23-05-20 总结 Meeting rooms 系列3个题目
    题目列表:P1.【easy,会员】MeetingRooms-LeetCodeP2.【Mid,会员】MeetingRoomsII-LeetCodeP3.MeetingRoomsIII-LeetCodeP1.会员题,检测会议是否安排得开思路:非常简单,直接按starttime进行排序,然后检测是否有overlap即可时间:O(nlogn),空间:O(1)classSolut......