动态规划(算法竞赛、蓝桥杯)--区间DP石子合并与环形石子合并、能量项链

本文主要是介绍动态规划(算法竞赛、蓝桥杯)--区间DP石子合并与环形石子合并、能量项链,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、B站视频链接:E28【模板】区间DP 石子合并_哔哩哔哩_bilibili

题目链接:石子合并(弱化版) - 洛谷

bb86f876332947ec8832480e07dac403.png

070cc8a7a95042f1ae6d2f96ea4d0f35.png

54504247cbe64eb2a2821577900d45e6.png

#include <bits/stdc++.h> 
using namespace std;
const int N=310;
int n,a[N],s[N];
int f[N][N];//f[i][j]表示从i到j合并成一堆的最小代价int main(){memset(f,0x3f,sizeof(f));cin>>n;//预处理 for(int i=1;i<=n;i++){cin>>a[i],s[i]=s[i-1]+a[i],f[i][i]=0;}//状态计算for(int len=2;len<=n;len++){//区间长度 for(int i=1,j;(j=i+len-1)<=n;i++){//区间端点 for(int k=i;k<j;k++){//区间分割点 f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]);}}} cout<<f[1][n];return 0;
} 

2、B站视频链接:E29 区间DP 环形石子合并_哔哩哔哩_bilibili

题目链接:[NOI1995] 石子合并 - 洛谷

311bfa264c154cda93d940ef0ef1207c.png

91bd7ab928974bdb951aa556cf7c6793.png

#include <bits/stdc++.h> 
using namespace std;
const int N=210;
int n,a[N],s[N];
int f[N][N];//最小值 
int g[N][N];//最大值int main(){memset(f,0x3f,sizeof f);memset(g,-0x3f,sizeof g);scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]),a[i+n]=a[i];}for(int i=1;i<=2*n;i++){s[i]=s[i-1]+a[i],g[i][i]=0,f[i][i]=0;}int minv=1e9,maxv=-1e9;for(int len=2;len<=n;len++){//枚举区间长度 for(int i=1,j;(j=i+len-1)<=2*n;i++){//区间端点 for(int k=i;k<j;k++){//区间分割点 f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]);g[i][j]=max(g[i][j],g[i][k]+g[k+1][j]+s[j]-s[i-1]);}minv=min(minv,f[i][i+n-1]);maxv=max(maxv,g[i][i+n-1]);}}printf("%d\n%d\n",minv,maxv);return 0;
} 

3、B站视频链接:E30 区间DP 能量项链_哔哩哔哩_bilibili

题目链接:[NOIP2006 提高组] 能量项链 - 洛谷

2a10c6ddda8c407883415a1e8caf4031.png

9248d62fecaa4f2ea4dbe4483b4fa2bf.png

76561a94521345d683349119a8654def.png

00147138249f49df9753306652716e84.png

#include <bits/stdc++.h> 
using namespace std;
const int N=210;
int n,a[N];//a[i]为第i颗珠子的头标记
int f[N][N];//f[i][j] 表示合并[i,j]得到的最大能量int main(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i],a[i+n]=a[i];for(int len=3;len<=n+1;len++){//区间长度 for(int i=1,j;(j=i+len-1)<=2*n;i++){//区间起点 for(int k=i+1;k<j;k++){//枚举分割点 f[i][j]=max(f[i][j],f[i][k]+f[k][j]+a[i]*a[k]*a[j]);}}}int res=0;for(int i=1;i<=n;i++){res=max(res,f[i][i+n]);}cout<<res<<endl;return 0;
} 

 

 

这篇关于动态规划(算法竞赛、蓝桥杯)--区间DP石子合并与环形石子合并、能量项链的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin

浅谈MySQL的容量规划

《浅谈MySQL的容量规划》进行MySQL的容量规划是确保数据库能够在当前和未来的负载下顺利运行的重要步骤,容量规划包括评估当前资源使用情况、预测未来增长、调整配置和硬件资源等,感兴趣的可以了解一下... 目录一、评估当前资源使用情况1.1 磁盘空间使用1.2 内存使用1.3 CPU使用1.4 网络带宽二、

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.