首页 > 其他分享 >动态规划 区间dp 基础题

动态规划 区间dp 基础题

时间:2024-11-27 12:12:01浏览次数:5  
标签:include int 石子 合并 区间 动态 代价 dp

题目
19182 石子合并(基础版)
时间限制:1000MS 代码长度限制:10KB
提交次数:0 通过次数:0

题型: 编程题 语言: 不限定
Description
设有 N(N≤300) 堆石子排成一排,其编号为1,2,3,⋯,N。每堆石子有一定的质量 mi(mi≤1000)。
现在要将这N堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻。
合并时由于选择的顺序不同,合并的总代价也不相同。试找出一种合理的方法,使总的代价最小,并输出最小代价。

输入格式
第一行,一个整数 N。

第二行,N 个整数 mi。

输出格式
输出仅一个整数,也就是最小代价。(题目确保答案在int范围)

输入样例
4
2 5 3 1

输出样例
22

提示
区间动态规划。题解可参考 11078 不能移动的石子合并(优先做)

点击查看代码
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cstring>
#define N 301
using namespace std;
int s[N]; // (前缀和)s[i]表示前i个整数之和
int dp[N][N]; // dp[i][j]表示将第i个石头到第j个石头合并在一起的方案集合中的最小代价
int main()
{
    memset(dp, 0x7f, sizeof(dp)); // 给dp每个位置设置最大值,因为后面要用min找最小代价
    int n;
    cin >> n;
    s[0] = 0;
    for(int i = 1; i <= n; i++)
    {
        cin >> s[i];
        s[i] += s[i - 1]; 
        dp[i][i] = 0; // 自己和自己不用合并,代价是0
    }
    for(int len = 2; len <= n; len++) // 合并长度范围
    {
        for(int l = 1; l + len - 1 <= n; l++) // 合并集合的左边界
        {
            int r = l + len - 1; // 合并集合的右边界
            for(int mid = l; mid < r; mid++) // 将集合拆分成两部分
            {
                dp[l][r] = min(dp[l][r], dp[l][mid] + dp[mid + 1][r] + s[r] - s[l - 1]); // 找到最小代价
            }
        }
    }
    cout << dp[1][n];
    return 0;
}

放自己博客复习用
转发自
https://blog.csdn.net/weixin_54218079/article/details/127969565

标签:include,int,石子,合并,区间,动态,代价,dp
From: https://www.cnblogs.com/wozai/p/18572095

相关文章

  • 二分查找的区间到底是开还是闭?
    二分查找的区间到底是开还是闭?在这两个月的时间里,我似乎没有产出任何的有关知识点的文章,大多数都是题解相关的内容。以至于许多人觉得Macw07“失踪”了。本文是我来到北美之后的第一篇知识点文章,请大家多多关照。这次不讲难的知识点了,讲一个大家都熟悉的,但又非常令人抓毛的......
  • jmeter测试udp接口详解
    jmeter测试udp广播(jmeter发送udp)jmeter测试udp广播(jmeter接收udp)先下载安装第三方插件下载链接:https://jmeter-plugins.org/install/Install/ 将下载的插件放在lib/ext目录里面 然后重启jmeter,如下图操作:          此时可以看到lib/ext目录里面多了......
  • GaussDB数据库SQL系列-动态语句
    一、前言在数据库中构建动态SQL语句是指根据不同的条件或参数创建不同的SQL语句。这通常是为了适应不同的业务需求,提高SQL的灵活性和效率。GaussDB数据库是一款具备高性能、高可用性和高扩展性的关系型数据库,它提供了丰富的功能和工具,支持动态SQL语句的构建。下面我们将介绍如何......
  • AntDesign - Vue Table组件 实现动态表格、列宽计算(方式二)
    朋友们,按照上文(方式一)思路,实现了动态表格和表头分组,这篇按照方式一的需求,扩展出另一种代码写法;一、表格头表格columns还是定义在data(){}中,初始化静态列数组,配置项列由后端接口返回(第二点写动态配置项代码);在方式一基础上加了筛选菜单功能,因此变化代码部分如下......
  • 蓝桥杯c++算法秒杀【6】之动态规划【下】(数字三角形、砝码称重(背包问题)、括号序列、
    别忘了请点个赞+收藏+关注支持一下博主喵!!!! ! ! ! !关注博主,更多蓝桥杯nice题目静待更新:)动态规划三、括号序列【问题描述】        给定一个括号序列,要求尽可能少地添加若干括号使得括号序列变得合法,当添加完成后,会产生不同的添加结果,请问有多少种本质......
  • 动态规划之背包问题
    0/1背包问题1.二维数组解法题目描述:有一个容量为m的背包,还有n个物品,他们的重量分别为w1、w2、w3.....wn,他们的价值分别为v1、v2、v3......vn。每个物品只能使用一次,求可以放进背包物品的最大价值。输入样例:10421334579输出样例:12解:符号描述:i表示第i个物品,背包......
  • 质因数分解+状态压缩求区间积
    例题https://www.luogu.com.cn/problem/P10724#include<bits/stdc++.h>#defineendl'\n'#definelowbit(x)(x&-x)usingnamespacestd;typedeflonglongll;typedefpair<int,int>pii;typedefpair<ll,ll>pll;constdoublepi=ac......
  • 【DP优化技巧】2. 矩阵加快
    例题来看一道例题。P5024[NOIP2018提高组]保卫王国对于这道题,首先如果没有国王的询问,可以设定状态:\(f_{i,0/1}\)代表以\(i\)为根的子树里面,自己选/不选的最小花费。易得状态转移方程:\[f_{u,0}=\sum_{v\inson_u}f_{v,1}\\f_{u,1}=p_u+\sum_{v\inson_u}\min(f_{v,0},......
  • 2024最新绿豆UI6、UI7三套UI的TV端和手机版:后台搭建、伪静态设置、动态域名、仓库对接
    后台安装教程环境要求PHP>=PHP7.4+(必须是7.4及以上版本,低于7.4会出现异常)MySQL>=5.5.0<5.7(需支持InnoDB引擎,建议使用5.6版本)Apache或Nginx安装步骤1.上传源码到网站将下载的后台源码上传到您的网站服务器上。2.设置运行目录设置网站的运行目录为pu......
  • 数据结构优化DP
    数据结构优化DP参考题单CleaningShiftsS区间覆盖问题区间加区间最值线段树维护cin>>n>>m>>e;m++,e++;for(inti=1;i<=n;i++) c[i].in();T.build(1,1,e);sort(c+1,c+1+n,[](nodea,nodeb){ if(a.l==b.l)returna.r<b.r; returna......