tyvj1055 沙子合并

石子合并的动态规划问题 题目大概都是这样的:   设有N堆沙子排成一排,其编号为1,2,3,…,N(N dp的方程很显然: 区间DP dp[i][j]=min(dp[i][k]+dp[k+1][j]+cost[i][j])   i 复杂度 N^3 这同时也是一个四边形优化DP的标准形式,对于i到j段的最优值s[i][j]满足:  s[i][j-1] 可以减小枚举范围,复杂度N^2 阅读详情

题目:

描述

设有N堆沙子排成一排,其编号为1,2,3,…,N(N<=300)。每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆,每次只能合并相邻的两堆,合并的代价为这两堆沙子的数量之和,合并后与这两堆沙子相邻的沙子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同,如有4堆沙子分别为 1  3  5  2 我们可以先合并1、2堆,代价为4,得到4 5 2 又合并 1,2堆,代价为9,得到9 2 ,再合并得到11,总代价为4+9+11=24,如果第二步是先合并2,3堆,则代价为7,得到4 7,最后一次合并代价为11,总代价为4+7+11=22;问题是:找出一种合理的方法,使总的代价最小。输出最小代价。

输入格式

第一行一个数N表示沙子的堆数N。
第二行N个数,表示每堆沙子的质量。 <=1000
输出格式

合并的最小代价

测试样例1

输入
4
1 3 5 2

输出
22

思路:

典型的区间dp。

dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum(i,j));

代码:

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
int dp[305][305];//dp[i][j]表示区间i~j合并的最小代价
int sum[305];
const int INF = 1 << 30;
int main()
{
    int N,num;
    scanf("%d",&N);
    scanf("%d",&sum[0]);
    for (int i = 1; i < N; i++){
        scanf("%d",&num);
        sum[i] = sum[i - 1] + num;
    }
    for (int i = 0; i < N; i++){
        dp[i][i] = 0;
    }
    for (int len = 1; len < N; len++){
        for (int i = 0; i + len < N; i++){
            int j = i + len;
            dp[i][j] = INF;
            for (int k = i; k < j; k++){
                dp[i][j] = min(dp[i][j],dp[i][k]+dp[k+1][j]+(sum[j]-sum[i-1]));
            }
        }
    }
    printf("%d\n",dp[0][N-1]);
    return 0;
}
动态规划——区间dp [石子合并] 动态规划(dp)是一种通过将问题分解为子问题,并利用已解决的子问题的解来求解原问题的方法。适用于具有重叠子问题和最优子结构性质的优化问题。通过定义状态和状态转移方程,动态规划可以在避免重复计算的同时找到问题的最优解,是一种高效的求解方法,常用于解决各种问题,如最短路径、背包问题、序列比对等。区间dp是一种dp的应用,用于解决涉及区间的问题。它将问题划分为若干个子区间,并通过定义状态和状态转移方程来求解每个子区间的最优解,最终得到整个区间的最优解。 阅读详情

相关推荐

AutoLISP 学习 (一)

AutoLISP基本语法结构、语法 以括号组成表达式,左右括号一定要成对,单、双引号也要成对,例如: (defun c:hello() (princ "\nHello world!") (prin1) ) 表达式格式:(函数名 操作数 操作数 …),例如: (setq p1 (list 0 0)) (setq p2 (list 10 10)) (setq p3 (list 20 20)) ;;; CAD中画直线,经过p1 p2 p3 (command "LINE" p1 p2 p3 ""

m0_54575622的博客 2122

[TYVJ] P1055 沙子合并

沙子合并 描述 Description 设有N堆沙子排成一排,其编号为1,2,3,…,N(N<=300)。每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆,每次只能合并相邻的两堆,合并的代价为这两堆沙子的数量之和,合并后与这两堆沙子相邻的沙子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同,如有4堆沙子分别为1352我们...

weixin_30390075的博客 392

实战详细讲解Qt插件plugin的编写与用法

qt插件的开发,可以说是动态库的开发,因为调用方式类似,多熟悉一下,利用Qt框架开发很简单的。在想想这种调用过程有的熟悉,比如公司买了一堆摄像头,公司要对摄像头进行二次开发,实现自己想要的功能,集成到一套设备里去,然后在卖给用户。此时厂商肯定会提供开发文档,并给你SDK包(软件开发工具包), 包里你会发现只有头文件和一堆库文件,没有源文件,因为实现的过程是产商公司保密的,给你看还得了。所以都封装成了库的形式给你调用,如静态库或者动态库。

qq_44667165的博客 1万+

算法概论-作业1-席景科老师 问题 D: algorithm-沙子的质量

问题 D: algorithm-沙子的质量 题目描述 设有N堆沙子排成一排,其编号为1,2,3,…,N(N< =300)。每堆沙子有一定的数量,可以用一个整数来描述,现在要将N堆沙子合并成为一堆,每次只能合并相邻的两堆,合并的代价为这两堆沙子的数量之和,合并后与这两堆沙子相邻的沙子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同,如有4堆沙子分别为1 3 5 2我们可以先合并1、2堆,代价为4,得到4 5 2又合并1,2堆,代价为9,得到9 2,再合并得到11,总代价为4+9+11=24,

allllloo的博客 776

Hyper-V显卡直通实战:手把手解决Windows 11虚拟机错误码43(附完整参数配置)

本文详细解析了在Windows 11 Hyper-V虚拟机中配置显卡直通时遭遇错误码43的根源,并提供了从环境检查、核心PowerShell命令(如Set-VMGpuPartitionAdapter)配置到虚拟机内驱动替换的完整实战解决方案,帮助用户彻底解决显卡驱动无法加载的问题。

weixin_29238147的博客 897

PX4 EKF2协方差矩阵‘负定’了怎么办?保姆级排查与数值稳定性修复指南

本文深入解析PX4 EKF2协方差矩阵出现‘负定’问题的原因,并提供全面的排查与修复方案。从理论分析到实践操作,详细介绍了数值稳定性危机的诊断工具、算法加固措施及工程实践中的防御性编程技巧,帮助飞控工程师有效解决滤波算法中的数值稳定性问题。

weixin_28730927的博客 318

区间型动态规划--沙堆合并

这是一道非常非常基础而简单的区间型动态规划,, 图片来自百度文库Mr。bzbts,侵删。 上面的分析是一个环形的石子合并,而我做的这个链型的更加简单,不需要考虑头尾相接。 下面是代码。#include #include using namespace std; int main() { int n, i, j, k; scanf("%d

Asmodians 907

免安装版Notepad++终极配置:右键菜单+图标美化+多文件批量处理(2024新版)

本文详细介绍了如何为免安装版Notepad++进行终极配置,包括右键菜单添加、图标美化以及多文件批量处理功能。通过注册表编辑和高级定制,用户可以在便携版中实现与安装版相同的功能体验,同时保持系统整洁。特别适合开发者、系统管理员和效率追求者使用。

nut55的博客 830

刷题记录:牛客NC51170石子合并

刷题记录:牛客NC51170石子合并

yingjiayu12的博客 437

如何用DeepSeek写年底工作总结?——从入门到精通的全流程指南

AI助手DeepSeek如何高效撰写工作总结 摘要:本文介绍如何利用DeepSeek智能AI助手高效完成工作总结写作。工作总结具有结构固定、语言规范、内容数据化三大特性,而DeepSeek的结构化生成、风格适配、数据整合和迭代优化四大核心能力与之完美匹配。文章提出"准备-搭架-填充-优化"四步工作法:1)精准输入岗位、时间范围等核心信息;2)先搭建逻辑清晰的提纲框架;3)分模块填充具体内容,突出数据与案例;4)通过风格润色和细节补充进行优化。通过合理运用多模态材料处理能力,DeepSee

通俗易懂学IT 286

130页5万字某市档案馆数字档案馆建设方案

【版权声明】本资料来源网络,仅用于行业知识分享,供个人学习参考,请勿商用。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间进行删除!完整资料领取见文末,部分资料内容:国家档案局证实颁布《数字档案馆建设指南》, 明确了数字档案馆建设原则、要求、目标,对相关系统建设内容、功能要求进行了概括和详细说明。数字档案馆系统建设应以 OAIS&nbsp;参考模型为设计基础,以实现数字资源的长期保存与可信管理。设计的数字档案馆系统架构如下图。图-1 数字档案馆体系结构数字档案馆建设包括五大层次和三大保障体系:

zuoan1993的博客 1180

TYVJ 1055 沙子合并

题目描述         设有N堆沙子排成一排,其编号为1,2,3,…,N(N< =300)。每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆,每次只能合并相邻的两堆,合并的代价为这两堆沙子的数量之和,合并后与这两堆沙子相邻的沙子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同,如有4堆沙子分别为  1    3    5    2  我们可以先合并1、

黑暗之神 2190

华为OD机试真题:明日之星选举 (Java/Py/C/ C++/JS/GO)

华为OD机试(机考)双机位C卷 【明日之星选举】,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 明日之星选举。

qq_45776114的博客 919

tyvj 1055 沙子合并

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LL long long #define Vi vector #

yueqiq 797

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Tyvj 1055 沙子合并 DP

#include #include #include using namespace std; #define inf 10000000 #define N 310 int a[N]; int sum[N]; int dp[N][N]; int main(){ int n; while(scanf("%d",&n)!=EOF){ sum[0]=0; memset(dp,0,sizeof

DieOrThink 771

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

沙子合并 TYVJ1055 解题报告

program P1055; var n,min:longint; sum:array [0..300] of longint;//用sum[i]表示前i堆合并之后的值 f:array [0..300,0..300] of longint;//用f[i

427

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

tyvj1055 沙子合并 (区间dp)

P1055 沙子合并 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述     设有N堆沙子排成一排,其编号为1,2,3,…,N(N 输入格式 第一行一个数N表示沙子的堆数N。 第二行N个数,表示每堆沙子的质量。  输出格式 合并的最小代价 测试样例1 输入 4

把复杂的事情简单描述 836

tyvj 1055 沙子合并 区间dp经典模型,石子合并

P1055 沙子合并 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 设有N堆沙子排成一排,其编号为1,2,3,…,N(N<=300)。每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆,每次只能合并相邻的两堆,合并的代价为这两堆沙子的数量之和,合并后与这两堆沙子相邻的沙子将和新堆相邻,合并时由于选择的顺序不...

weixin_30432179的博客 111

TYVJ P1055 沙子合并

目录: 题目: 分析: 代码: 题目: 传送门 分析: 一道区间dp的版子题,用上前缀和,就基本破题了 代码: #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cmath&gt; #include&lt;cstring&gt; #include&lt;cstdlib&g...

qq_35786326的博客 745

|Tyvj|NOI1995|动态规划|P1055 沙子合并

http://tyvj.cn/p/1055 #include #include #include using namespace std; const int maxn = 1000 + 5; int f[maxn][maxn]; //设f[i][j]为合并[i..j]的最小费用 //f[i][j] = min{f[i][j], f[i][k]+f[k+1][j]+a[j]-a[i-1]

博客停更,请到"再见,优快云"文章中找新博客地址 1356

TYVJ 1062 合并傻子

问题 K: TYVJ 1062 合并傻子 时间限制: 0 Sec  内存限制: 128 MB 提交: 58  解决: 20 [提交][状态][社区] 题目描述 在一个园形操场的四周站着N个傻子,现要将傻子有次序地合并成一堆.规定每次只能选相邻的2个傻子合并成新的一个傻子,并将新的一个傻子的RP数,记为该次合并的RP数。 (合并方法与NOI1999石子合并(本题库的沙子合并)相同,

黑暗之神 1723

tyvj1055(石子合并)动规基础

   FromAdmin☆沙子合并        描述 Description      设有N堆沙子排成一排,其编号为1,2,3,…,N(N<=300)。每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆,每次只能合并相邻的两堆,合并的代价为这两堆沙子的数量之和,合并后与这两堆沙子相邻的沙子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同,如有4堆沙子分别为 1  3  5  2 我们可以先合并1、2堆,代价为4,得到4 5 2 又合并 1,2堆,代价为9,得到9 2

独行闹市无人问,青灯剑影响素琴 985

tyvj1055 石子合并 【例题精讲】

描述: 设有N堆沙子排成一排,其编号为1,2,3,…,N(N<=300)。每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆,每次只能合并相邻的两堆,合并的代价为这两堆沙子的数量之和,合并后与这两堆沙子相邻的沙子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同,如有4堆沙子分别为 1 3 5 2 我们可以先合并1...

daxian3723的博客 185

noi1995/TYVJ1055(dp,四边形不等式)

描述 设有N堆沙子排成一排,其编号为1,2,3,…,N(N&lt;=300)。每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆,每次只能合并相邻的两堆,合并的代价为这两堆沙子的数量之和,合并后与这两堆沙子相邻的沙子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同,如有4堆沙子分别为 1 3 5 2 我们可以先合并1、2堆,代价为4,得到4 5...

a1035719430的博客 225
上一篇: nyoj746 整数划分(四)
下一篇: cocos2d-x 有关Node
_IanXiao
博客等级 码龄12年 84粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值