YTU3653: 方盒游戏 动态规划 c++

2023-10-12 17:59

本文主要是介绍YTU3653: 方盒游戏 动态规划 c++,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

题目描述

输入

输出

这是代码,自己都大受震撼

希望再也不要让我遇到这道题!!

 

题目描述

NNN 个方盒摆成一排,每个方盒有自己的颜色,如图所示。连续摆放的同颜色方盒构成一个“大块”

玩家每次点击一个方盒,则该方盒所在大块就会消失。若消失的大块中共有 kkk 个方盒,, 则玩家获得 k×kk \times kk×k 个积分。

请问:给定游戏开始时的状态,玩家可获得的最高积分是多少?

输入

第一行是一个整数 ttt (1≤t≤15)(1 \le t \le 15)(1≤t≤15),表示共有多少组测试数据。每组测试数据又包括两行:
首先是一个整数 nnn (1≤n≤200)(1 \le n \le 200)(1≤n≤200),表示共有多少个方盒; 其次包括 nnn 个整数,表示每个方盒的 颜色。这些整数的取值范围是 [1,n]\left[1, n \right][1,n]。

输出

对每组测试数据,分别输出该组测试数据的序号,以及玩家可以获得的最高积分。

这是代码,自己都大受震撼

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;struct sbtz
{int color;int len;
};
struct sbtz box[205];
int ans[205][205][205];int sb_box(int start, int end, int lens)
{int t1, t2;if (ans[start][end][lens] > 0)return ans[start][end][lens];t1 = box[end].len + lens;t1 = t1 * t1;if (start == end){ans[start][end][lens] = t1;return ans[start][end][lens];}t1 = t1 + sb_box(start, end - 1, 0);for (int i = end - 1; i >= start; i--){if (box[i].color == box[end].color){t2 = sb_box(start, i, box[end].len + lens) + sb_box(i + 1, end - 1, 0);if (t2 > t1) {t1 = t2;}}}ans[start][end][lens] = t1;return ans[start][end][lens];
}int main()
{int t, n;cin >> t;for (int i = 1; i <= t; i++){cin >> n;int num = 0;cin >> box[num].color;box[num].len = 1;for (int j = 1; j < n; j++){int cc;cin >> cc;if (cc == box[num].color)box[num].len++;else{num++;box[num].len = 1;box[num].color = cc;}}memset(ans, 0, sizeof(ans));cout << "Case " << i << ": " << sb_box(0, num, 0) << endl;}return 0;
}

希望再也不要让我遇到这道题!!

实在是自己做不出来,太菜了,具体参考了这位大佬的文章:动态规划——方盒游戏详解_算法解占位盒游戏_*远方的博客-CSDN博客d

这篇关于YTU3653: 方盒游戏 动态规划 c++的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/197503

相关文章

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模

C++类和对象之初始化列表的使用方式

《C++类和对象之初始化列表的使用方式》:本文主要介绍C++类和对象之初始化列表的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C++初始化列表详解:性能优化与正确实践什么是初始化列表?初始化列表的三大核心作用1. 性能优化:避免不必要的赋值操作2. 强

C++迭代器失效的避坑指南

《C++迭代器失效的避坑指南》在C++中,迭代器(iterator)是一种类似指针的对象,用于遍历STL容器(如vector、list、map等),迭代器失效是指在对容器进行某些操作后... 目录1. 什么是迭代器失效?2. 哪些操作会导致迭代器失效?2.1 vector 的插入操作(push_back,

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文