区间DP模板题

区间DP模板Code:

for(int len=;len<=n;len++)
{
for(int i=;i<=*n-;i++) //区间左端点
{
int j = i + len - ; //区间右端点
for(int k=i;k<j;k++) //断点位置
{
f[i][j] = min(f[i][j],f[i][k] + f[k + ][j] + s[j] - s[i - ]);
}
}
}

题目描述

在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。

试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.

输入输出格式

输入格式:

数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的个数.

输出格式:

输出共2行,第1行为最小得分,第2行为最大得分.

输入输出样例

输入样例#1: 4 4 5 9 4

输出样例#1: 43 54

这个题的数据存储特点有一点代表性:破环成列,把长度为n的环转换为长度为2n-1的列,再进行一次动归。

针对于这个题的n很小,我们就可以用它来代表区间长度,这样O(n ^ 3)也能跑过去了

区间DP的概念就是把一个区间的状态一直分割为它的子区间的状态,一直到这个子区间的状态是显然可求的,最后再将它们综合起来

举个栗子:

f[i][j]中我们可以将[i,j]这一个区间划分为[i,k]和[k + 1,j]这两个区间的总状态再进行一次操作

这个的边界就是[i,k]和[k + 1,j]是显然可求的状态

这个题要求一个最大值和最小值的问题

我们可以显而易见地发现最小值一定小于等于最大值

这样我们可以只建立一个数组先求最小再求最大,节省了两个数组的空间(虽然这不是重点qwq)

Code:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int f[][]; //节省空间
int s[];
int n,x,ans = ;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&x);
s[i] = s[i - ] + x;
s[i + n] = s[i]; //把长度开到 2n - 1
}
for(int i=;i<n;i++)
s[i + n] += s[n];
memset(f,,sizeof(f)); //初始化
for(int i=;i<=*n-;i++)
f[i][i] = ;
for(int len=;len<=n;len++)
{
for(int i=;i<=*n-;i++) //区间左端点
{
int j = i + len - ; //区间右端点
for(int k=i;k<j;k++) //断点位置
{
f[i][j] = min(f[i][j],f[i][k] + f[k + ][j] + s[j] - s[i - ]);
}
}
}
for(int i=;i<=n;i++)
ans = min(ans,f[i][i + n - ]);
printf("%d\n",ans); //最小值一定比最大值要小,所以无需更新
for(int len=;len<=n;len++)
{
for(int i=;i<=*n-;i++) //区间左端点
{
int j = i + len - ; //区间右端点
for(int k=i;k<j;k++) //断点位置
{
f[i][j] = max(f[i][j],f[i][k] + f[k + ][j] + s[j] - s[i - ]);
}
}
}
for(int i=;i<=n;i++)
ans = max(ans,f[i][i + n - ]);
printf("%d\n",ans);
return ;
}

[洛谷P1880][NOI1995]石子合并的更多相关文章

  1. 洛谷 P1880 [NOI1995]石子合并 题解

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

  2. 洛谷P1880 [NOI1995]石子合并 纪中21日c组T4 2119. 【2016-12-30普及组模拟】环状石子归并

    洛谷P1880 石子合并 纪中2119. 环状石子归并 洛谷传送门 题目描述1 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石 ...

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

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

  4. 洛谷P1880 [NOI1995] 石子合并 [DP,前缀和]

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

  5. 洛谷 P1880 [NOI1995]石子合并

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

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

    嗯... 题目链接:https://www.luogu.org/problem/P1880 这道题特点在于石子是一个环,所以让a[i+n] = a[i](两倍长度)即可解决环的问题,然后注意求区间最小 ...

  7. 【区间dp】- P1880 [NOI1995] 石子合并

    记录一下第一道ac的区间dp 题目:P1880 [NOI1995] 石子合并 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 代码: #include <iostream> ...

  8. P1880 [NOI1995]石子合并[区间dp+四边形不等式优化]

    P1880 [NOI1995]石子合并 丢个地址就跑(关于四边形不等式复杂度是n方的证明) 嗯所以这题利用决策的单调性来减少k断点的枚举次数.具体看lyd书.这部分很生疏,但是我还是选择先不管了. # ...

  9. 区间DP小结 及例题分析:P1880 [NOI1995]石子合并,P1063 能量项链

    区间类动态规划 一.基本概念 区间类动态规划是线性动态规划的拓展,它在分阶段划分问题时,与阶段中元素出现的顺序和由前一阶段的那些元素合并而来由很大的关系.例如状态f [ i ][ j ],它表示以已合 ...

随机推荐

  1. nginx安装编译参数

  2. Tomcat解决中文乱码并部署项目

    1.在Tomcat下的server.xml中添加URIEncoding="UTF-8"(解决中文乱码的问题) 2.在Tomcat下的server.xml中添加<Context ...

  3. MongoDB的简单操作

    一.简介 二.MongoDB基础知识 三.安装 四.基本数据类型 五.增删改查操作 六.可视化工具 七.pymongo 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoD ...

  4. python(8):面向对象编程

    有三种程序类型: (1)面向过程:按照一定的逻辑顺序,一步步垒代码 (2)面向函数:对用常用的计算,建立函数避免重复 (3)面向对象: 函数的集合,对函数进行分类和封装 (一) 抽象 抽象: 哈巴狗, ...

  5. Imperial roads 非严格次小生成树

    cf测评姬比uva快了五倍... /* 不管这条边是不是在mst上,直接跑lca求出路径上的最大边w即可 ans=mst-w+dist(u,v) */ #include<bits/stdc++. ...

  6. mysql登录报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    在MySQL登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问 对于出现拒绝访问root用户的解决方案错 ...

  7. js 图片转换base64 base64转换为file对象

    function getImgToBase64(url,callback){//将图片转换为Base64 var canvas = document.createElement('canvas'), ...

  8. vue 踩坑记录

    1.绑定双击事件用 @dblclick 不要用@ondblclick  在vue中@=on 2.Vue中路由跳转踩坑. 比如我的路由如下定义 routes: [ { path: "/&quo ...

  9. CentOS命令行向OSS上传文件或文件夹

    下载地址:https://helpcdn.aliyun.com/document_detail/50452.html?spm=a2c4g.11186623.4.2.KyQak3 百度云盘:https: ...

  10. zookeeper 学习 客户端Acl操作笔记

    Acl = Access control list create /node2 node2data [zk: localhost:2181(CONNECTED) 14] addauth digest ...