黑龙江省赛 Doin‘ Time(区间动态规划)

2024-02-17 18:10

本文主要是介绍黑龙江省赛 Doin‘ Time(区间动态规划),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

​​​​​​​​​​​​在这里插入图片描述
题意: 第一行输入一个数字n,表示数据个数,接下来输入n个数据,你有n - 1 次操作数,每次操作都从其中挑选一对数a[x] 和 a[x + 1] 两个数变成一个数a[x] * a[x + 1],同时产生pow((a[x] - a[x + 1]), 2) 的一个value值,求当最后只剩下一个数字时sumvalue累计的最大值是多少。
**思路:**我们先预处理arry[ i ][ j ] (从i 到 j 位置上所有数乘积的取模),dp[ l ][ r ] 表示从l到 r 上value 的最大值

转移方程为: dp[l][r] = max(dp[l][r] ,dp[l][k] + dp[k + 1][r] + (arry[l][k] - arry[k + 1][r]) * (arry[l][k] - arry[k + 1][r]))

解释一下转移方程的意思:在[l, r] 的区间内找到最大的sumvalue的值,
首先dp[l][k] 和 d[k + 1][r] 都是已经被处理好的,(在以下的代码中长度从len = 2开始,因此往后所需要的所有子区间的价值都已经是最优的了)因此在每次调用转移方程时都可以看成是最后只剩下两个数变一个数的操作,即都是[l, r]内的最后一步,此时就是前区间的乘积所得到的数和后区间的乘积所得到的数之间进行一步合并取value的操作,最终取sumvalue最大的作为dp[l][r]的值。

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 2e5 + 7;
const int mod = 1e6 + 3;int n, a[305];
LL dp[305][305];
LL arry[305][305];int main(){ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n;for(int i = 1; i <= n; i++) cin >> a[i];for(int i = 1; i <= n; i++){LL now = 1;for(int j = i; j <= n; j++){now = now * a[j] % mod;arry[i][j] = now;}}for(int len = 2; len <= n; len++){for(int beg = 1; beg + len - 1 <= n; beg++){int l = beg, r= beg + len - 1;for(int k = l; k < r; k++){dp[l][r] = max(dp[l][r] ,dp[l][k] + dp[k + 1][r] + (arry[l][k] - arry[k + 1][r]) * (arry[l][k] - arry[k + 1][r]));}}}cout << dp[1][n] << '\n';
}

这篇关于黑龙江省赛 Doin‘ Time(区间动态规划)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

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

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

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

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

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

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

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指