动态规划(算法竞赛、蓝桥杯)--区间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

相关文章

基于C#实现PDF文件合并工具

《基于C#实现PDF文件合并工具》这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下... 界面主要用于发票PDF文件的合并。经常出差要报销的很有用。代码using System;using System.Col

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

Python视频剪辑合并操作的实现示例

《Python视频剪辑合并操作的实现示例》很多人在创作视频时都需要进行剪辑,本文主要介绍了Python视频剪辑合并操作的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录介绍安装FFmpegWindowsMACOS安装MoviePy剪切视频合并视频转换视频结论介绍

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

在C#中合并和解析相对路径方式

《在C#中合并和解析相对路径方式》Path类提供了几个用于操作文件路径的静态方法,其中包括Combine方法和GetFullPath方法,Combine方法将两个路径合并在一起,但不会解析包含相对元素... 目录C#合并和解析相对路径System.IO.Path类幸运的是总结C#合并和解析相对路径对于 C

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

.NET利用C#字节流动态操作Excel文件

《.NET利用C#字节流动态操作Excel文件》在.NET开发中,通过字节流动态操作Excel文件提供了一种高效且灵活的方式处理数据,本文将演示如何在.NET平台使用C#通过字节流创建,读取,编辑及保... 目录用C#创建并保存Excel工作簿为字节流用C#通过字节流直接读取Excel文件数据用C#通过字节