有点理解了进阶指南上说的”阶段,状态和决策“

/*
区间dp的基础题:
以区间长度[2,n]为阶段,枚举该长度的区间,状态dp[l][r]表示合并区间[l,r]的最小费用
状态转移方程dp[l][r]=sum[r]-sum[l]+min(dp[l][k]+dp[k+1][r]),其中k是决策
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std; int n,sum[],a[],dp[][]; int main(){
while(scanf("%d",&n)==){
for(int i=;i<=n;i++)scanf("%d",&a[i]);
memset(dp,0x3f,sizeof dp);
for(int i=;i<=n;i++){//初始状态
dp[i][i]=;
sum[i]=sum[i-]+a[i];
} for(int len=;len<=n;len++)//阶段
for(int l=;l<=n-len+;l++){//状态;左端点
int r=l+len-;//状态,右端点
for(int k=l;k<r;k++)//决策
dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+][r]);
dp[l][r]+=sum[r]-sum[l-];
}
printf("%d ",dp[][n]); memset(dp,,sizeof dp);
for(int len=;len<=n;len++)
for(int l=;l<=n-len+;l++){
int r=l+len-;
for(int k=;k<r;k++)
dp[l][r]=max(dp[l][r],dp[l][k]+dp[k+][r]);
dp[l][r]+=sum[r]-sum[l-];
}
printf("%d\n",dp[][n]);
}
}

HRBUST - 1818 石子合并 区间dp入门的更多相关文章

  1. HDU4632 Poj2955 括号匹配 整数划分 P1880 [NOI1995]石子合并 区间DP总结

    题意:给定一个字符串 输出回文子序列的个数    一个字符也算一个回文 很明显的区间dp  就是要往区间小的压缩! #include<bits/stdc++.h> using namesp ...

  2. HRBUST 1818 石子合并问题--直线版

    石子合并问题--直线版 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HRBUST. Original ...

  3. 洛谷 P1880 [NOI1995] 石子合并(区间DP)

    传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题解: 这道题是石子合并问题稍微升级版 这道题和经典石子合并问题的不同在于,经典的石子合 ...

  4. 石子合并 区间dp模板

    题意:中文题 Description 在操场上沿一直线排列着 n堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的两堆石子合并成新的一堆, 并将新的一堆石子数记为该次合并的得分.允许在第一次合 ...

  5. [nyoj737]石子归并(区间dp入门题)

    题意:有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆.求出总的代价最小值 ...

  6. 石子合并 区间DP模板题

    题目链接:https://vjudge.net/problem/51Nod-1021 题意 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石 ...

  7. 洛谷 P1080 石子合并 ( 区间DP )

    题意 : 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.试设计出1个算法,计算出将N堆石子合并成1堆 ...

  8. 石子合并——区间dp

    石子合并(3种变形) <1> 题目: 有N堆石子排成一排(n<=100),现要将石子有次序地合并成一堆,规定每次只能选相邻的两堆合并成一堆,并将新的一堆的石子数,记为改次合并的得分, ...

  9. 洛谷P1880 石子合并(环形石子合并 区间DP)

    题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1 ...

随机推荐

  1. GoLang基础数据类型--->数组(array)详解

    GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...

  2. 面向对象【day08】:问答式面相对象(四)

    本节内容 1.什么是面向对象编程 2.什么是市类?什么是对象?又有什么关系? 3.什么时候适用面向对象? 4.self就是调用当前方法的对象 5.封装.继承.多态 6.字段方法 1.什么是面向对象编程 ...

  3. CentOS 使用 Xfce 桌面并通过 xrdp 登录

    基础环境 CentOS 7.1 最小化安装 安装步骤 以下步骤,均通过ssh连接到主机进行操作. 安装桌面支持 首先安装桌面支持 yum groupinstall "Server with ...

  4. mac下chrome快捷键

    打开开发者工具:alt + command + I: 打开“JavaScript 控制台”:⌘-Option-J: 打开当前网页的源代码:⌘-Option-U: 刷新页面:command + R: m ...

  5. B+树,B树,聚集索引,非聚集索引

    简介: B+树中只有叶子节点会带有指向记录的指针,而B树则所有节点都带有 B+树索引可以分为聚集索引和非聚集索引 mysql使用B+树,其中Myisam是非聚集索引,innoDB是聚集索引 聚簇索引索 ...

  6. contourf和contour用法区别

    import numpy as np import matplotlib.pyplot as plt %matplotlib inline from matplotlib.colors import ...

  7. 求FIRST集和FOLLOW集

    花了点时间弄了个大概,希望对和我一样的人有所帮助.   文法如下: E -> TE'E' -> +TE'|εT -> FT'T' -> *FT'|εF -> (E)|id ...

  8. java Future模式的使用

    一.Future模式的使用. Future模式简述 传统单线程环境下,调用函数是同步的,必须等待程序返回结果后,才可进行其他处理. Futrue模式下,调用方式改为异步. Futrue模式的核心在于: ...

  9. 第16月底18天 phpstudy设置

    1.phpstudy设置-端口常规设置 E:\phpStudy\Apache\bin>httpd.exeAH00526: Syntax error on line 14 of E:/phpStu ...

  10. Python GUI工具Tkinter以及拖拉工具Page安装

    如果使用Tkinter作为Python GUI工具,我们需要安装Tkinter,这个使用conda或者pip即可: conda install -c anaconda tk 为了提高界面编写效率,可以 ...