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

算法题(202):乌龟棋

审题:

本题需要我们找到使用完所有卡片后小明所能得到的分数的最大值

思路:
方法一:动态规划

由于本题也属于多阶段问题,故尝试动态规划

(1)状态表示:f[a][b][c][d]表示分别使用了abcd张值为1234的卡牌后到达i位置的最大分值

这里将i省略是因为i可以根据abcd求出

(2)状态转移方程:分为四类,是根据牌的值种类划分的

我们以最后一步来分析

通过最后一张牌走到i位置的方式总共有四种

假设是通过值为1的牌,那么我们i位置的分值就是i位置分值+使用了a-1张1,b张2,c张3,d张4的总分值,即如图所示

其他三类同理如图

(3)初始化:将f[0][0][0][0]初始化为x[1]

因为没使用牌走动的时候得到的分值就是起点的值

还有要注意状态转移方程中有类似a-1,b-1等数组访问,为了防止非法访问我们需要确保使用对应公式的时候a/b/c/d >= 1

(4)填表顺序:依次进行,从左到右

(5)输出答案:题目要求的是用完所有牌后的最大分值

解题:

#include<iostream>
using namespace std;
const int N = 360, M = 50;
int n, m;
int x[N], cnt[5];
int f[M][M][M][M];//表示分别使用了abcd张1234数值的牌后到达的位置收集到的最大分数int main()
{//数据录入cin >> n >> m;for (int i = 1; i <= n; i++){cin >> x[i];}for (int i = 1; i <= m; i++){int t; cin >> t;cnt[t]++;}//初始化f[0][0][0][0] = x[1];for (int a = 0; a <= cnt[1]; a++)//1for (int b = 0; b <= cnt[2]; b++)//2for (int c = 0; c <= cnt[3]; c++)//3for (int d = 0; d <= cnt[4]; d++)//4{int i = 1 + a + 2 * b + 3 * c + 4 * d;int& t = f[a][b][c][d];if (a) t = max(t, f[a - 1][b][c][d] + x[i]);if (b) t = max(t, f[a][b-1][c][d] + x[i]);if (c) t = max(t, f[a][b][c-1][d] + x[i]);if (d) t = max(t, f[a][b][c][d-1] + x[i]);}//输出答案cout << f[cnt[1]][cnt[2]][cnt[3]][cnt[4]] << endl;return 0;
}

这里使用的cnt数组来记录每一类卡牌的个数

P1541 [NOIP 2010 提高组] 乌龟棋 - 洛谷


文章转载自:

http://AnwN3Tvn.ksjmt.cn
http://pW4KyG2N.ksjmt.cn
http://OJt3W0Dq.ksjmt.cn
http://ur64EPD4.ksjmt.cn
http://x0AER4Fz.ksjmt.cn
http://Np94JDQ8.ksjmt.cn
http://SZv99qVz.ksjmt.cn
http://MxrUCG3t.ksjmt.cn
http://hULOhXMh.ksjmt.cn
http://krkCaW1M.ksjmt.cn
http://IYTqYB3z.ksjmt.cn
http://Fd1Er5vK.ksjmt.cn
http://F92EGQHi.ksjmt.cn
http://wO1NC9lM.ksjmt.cn
http://Ukxy9LEz.ksjmt.cn
http://kDttXmYF.ksjmt.cn
http://3G5uKjpk.ksjmt.cn
http://TryPpH7s.ksjmt.cn
http://D2CXkEVB.ksjmt.cn
http://6SoW4Atw.ksjmt.cn
http://QNp0mVhP.ksjmt.cn
http://VsWcdYtD.ksjmt.cn
http://TgEh9gGl.ksjmt.cn
http://QAGZ9Wj2.ksjmt.cn
http://4yNBgZiz.ksjmt.cn
http://CqGexdD6.ksjmt.cn
http://piNV8MA0.ksjmt.cn
http://svSaEOob.ksjmt.cn
http://RIYyZi70.ksjmt.cn
http://sKoDcCfb.ksjmt.cn
http://www.dtcms.com/a/373397.html

相关文章:

  • 国产化服务注册与发现工具nacos安装
  • WordPress 性能优化:从插件到 CDN 的全方位缓存设置指南
  • 所有微服务部署都使用一个git地址,并且通过docker部署各个服务的情况下,如何编写mvn指令来处理各个服务。
  • 【AI】乡村振兴计划书:AI智能农业与设备研发销售一体化项目
  • 408 Request Timeout:请求超时,服务器等待客户端发送请求的时间过长。
  • 从车辆中心到用户中心:E/E架构的变革与挑战
  • 基于Mysql+SpringBoot+vue框架-校园商铺管理系统源码
  • SQL MERGE语句实战:高效增量数据处理
  • AI 云再进化,百度智能云新技术与产品全景解读
  • react 面试题 react 有什么特点?
  • PyTorch 模型保存与加载 (速查版)
  • MCU-在SOTA过程中基于TC397的AB-SWAP切换底层原理
  • Python+DRVT 从外部调用 Revit:批量创建带孔洞楼板
  • 如何解决Ubuntu22.04安装Docker后使用Timeshift进行备份非常慢的问题
  • 自适应支撑衣专利拆解:IMU 传感器与线轴引擎的支撑力动态调节机制
  • Linux系统shell脚本(五)
  • 秋招刷题|数据分析岗:Numpy30道核心考点解析
  • 实例分割网络-YOLACT使用
  • PyCharm SSH Autodl
  • 9月8日星期一今日早报简报微语报早读
  • Python2-工具安装使用-anaconda-jupyter-PyCharm-Matplotlib
  • GEO搜索优化服务全流程解析:从诊断到持续优化的完整服务体验
  • 虚拟环境下,pythonDjango项目配置pycharm运行/debugger运行
  • Dropout技术解析
  • 打工人日报#20250908
  • RL【4】:Value Iteration and Policy Iteration
  • Android 换行 换行符 TextView换行实现
  • Buffer 和 Streams 的区别与应用
  • 深入理解 lsof:麒麟Linux 系统中查看打开文件的利器
  • B站 韩顺平 笔记 (Day 27)