石子归并 51Nod - 1021(区间DP入门题)
N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。
例如: 1 2 3 4,有不少合并方法
1 2 3 4 => 3 3 4(3) => 6 4(9) => 10(19)
1 2 3 4 => 1 5 4(5) => 1 9(14) => 10(24)
1 2 3 4 => 1 2 7(7) => 3 7(10) => 10(20)
括号里面为总代价可以看出,第一种方法的代价最低,现在给出n堆石子的数量,计算最小合并代价。
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
//#define int long long
using namespace std;
const int maxn=1e6+5;
int dp[1005][1005],sum[maxn],a[maxn];
int main(){memset(dp,0x3f3f3f3f,sizeof(dp));int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];sum[i]=sum[i-1]+a[i];dp[i][i]=0;}for(int len=2;len<=n;len++){for(int i=1;i+len-1<=n;i++){int l=i,r=i+len-1;for(int k=l;k<=r;k++){dp[l][r]=min(dp[l][k]+dp[k+1][r]+sum[r]-sum[l-1],dp[l][r]);}}}cout<<dp[1][n]<<endl;
}
石子归并 51Nod - 1021(区间DP入门题)相关推荐
- 石子归并 51Nod - 1021
N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价.计算将N堆石子合并成一堆的最小代价. 例如: 1 2 3 4,有不少 ...
- 区间dp入门——总结+习题+解析
前天学长拉了个区间dp的专题,花了两个做,今天就来做个总结吧!!! 区间dp其实就是一种建立在线性结构上的对区间的动态规划,dp本来就是很奇妙的东西,也没有什么套路,就是一种思考的数学思维方式,只有做 ...
- 数位dp入门题 洛谷P2657 [SCOI2009] windy 数
题干 传送门 windy 定义了一种 windy 数. 题目描述 不含前导零且相邻两个数字之差至少为 2的正整数被称为 windy 数.windy 想知道,在 a 和 b 之间,包括 a 和 b ,总 ...
- AcWing 1068. 环形石子合并(环形区间DP)
AcWing 1068. 环形石子合并(环形区间DP) 一.问题 二.思路 三.代码 一.问题 二.思路 在讲解这道题之前,我们需要先掌握线性的区间DP问题,如果对于线性区间DP的解决方式还不了解的话 ...
- 洛谷P3146 区间dp做题笔记
不是题解,不是题解,不是题解,纯属个人笔记,不知所言. 传送门:P3146 问:什么时候才能写的一手漂亮的dp? 答:夜深人静之时,魂归故里之日. 此题是一道基础的区间dp的题,看完题解犹豫片刻,之后 ...
- 合并石子 区间dp水题
合并石子 链接: nyoj 737 描述: 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N- ...
- 51Nod - 1522 区间dp
题意: 题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1522 思路: 很好的区间dp. 从1开始填起,两个1 ...
- LightOJ 1422:Halloween Costumes(区间DP入门)
http://lightoj.com/volume_showproblem.php?problem=1422 题意:去参加派对,有n场派对,每场派对要穿第wi种衣服,可以选择外面套一件,也可以选择脱掉 ...
- hdu_Anniversary party_(树形DP入门题)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:有N个人,N-1个人有自己的上司,每个人有一个快乐值,如果这个人参加了聚会,那么这个人的直 ...
最新文章
- python怎么开发安卓程序_怎样用python开发安卓app-到底如何使用Python开发Android程序.txt...
- java投票输出票数最高前三名,给你喜欢的作品投票,票数前三名获本平台赠送书一本。|诗花朵朵...
- 前端学习(3310):redux的state hook对象
- 图像处理之图像特征匹配
- Unix——optarg与getopt的用法
- SpringBoot2.1.5(18)--- 国际化配置,SpringBoot Locale 国际化使用方法
- 学python之前要学c语言吗_学Python之前需要学c语言吗
- ggthemes包:丰富ggplot2的表现力
- 小米9008授权账号_小米AI音箱APP的秘密
- 微信怎么测试好友软件,三种方法教你检测微信中的僵尸粉!不要再用第三方软件了哦...
- 中关村 - DIY之如何唯美地阅读电子书
- PPP和PDP激活是什么区别
- 简述eureka的自我保护模式? 如何配置其自我保护模式
- SQL语句,关于随机分组后在随机排序
- oracle中drop和delete,oracle中delete drop truncate的用法和区别
- Vultr Debian8系统一键快速DD安装Windows7系统
- 搭建SpringCloud配置中心 Config Server
- 辞职的时候,如果老板挽留你,你会怎么办呢?
- android四大组件之四-BroadCast实现原理分析
- PHP 上传并压缩图片