brbustoj 1818 石子合并问题--直线版
比较经典且基础的区间dp,转移方程为
dp_max[i][j] = max(dp_max[i][j],dp_max[i][k] + dp_max[k+1][j] + sum[j]-sum[i-1]);
dp_min[i][j] = min(dp_min[i][j],dp_min[i][k] + dp_min[k+1][j] + sum[j]-sum[i-1]);
#include <fstream>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
int main() {
int n,a[],sum[];
int dp_max[][];
int dp_min[][];
while(~scanf("%d",&n))
{
memset(dp_min,0x3f,sizeof(dp_min));
memset(dp_max,,sizeof(dp_max));
sum[] = ;
for(int i = ;i <= n;i++)
{
dp_max[i][i] = dp_min[i][i] = ;
scanf("%d",&a[i]);
sum[i] = sum[i-] + a[i];
}
for(int len = ;len < n;len++)
{
for(int i = ;i <= n-len;i++)
{
int j = i + len;
for(int k = i;k < j;k++)
{
dp_max[i][j] = max(dp_max[i][j],dp_max[i][k] + dp_max[k+][j] + sum[j]-sum[i-]);
dp_min[i][j] = min(dp_min[i][j],dp_min[i][k] + dp_min[k+][j] + sum[j]-sum[i-]);
}
}
}
printf("%d %d\n",dp_min[][n],dp_max[][n]);
}
return ;
}
brbustoj 1818 石子合并问题--直线版的更多相关文章
- HRBUST 1818 石子合并问题--直线版
石子合并问题--直线版 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HRBUST. Original ...
- 石子合并(直线版+环形版)&(朴素写法+四边形优化+GarsiaWachs算法)
石子合并-直线版 (点击此处查看题目) 朴素写法 最简单常见的写法就是通过枚举分割点,求出每个区间合并的最小花费,从而得到整个区间的最小花费,时间复杂度为O(n^3),核心代码如下: ; i < ...
- 石子合并问题--直线版 HRBUST - 1818
t题目链接:https://vjudge.net/problem/HRBUST-1818 思路:一段已经合并的区间,分成两段区间,遍历所有能分开的区间. 代码有注释,基本就这样一个简单是思路. #in ...
- HRBUST 1819 石子合并问题--圆形版
石子合并问题--圆形版 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HRBUST. Original ...
- HRBUST - 1819 石子合并问题--圆形版(区间dp+环形+四边形优化)
石子合并问题--圆形版 在圆形操场上摆放着一行共n堆的石子.现要将石子有序地合并成一堆.规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆石子数记为该次合并的得分.请编辑计算出将n堆石子合并成一堆的 ...
- HRBUST - 1818 石子合并 区间dp入门
有点理解了进阶指南上说的”阶段,状态和决策“ /* 区间dp的基础题: 以区间长度[2,n]为阶段,枚举该长度的区间,状态dp[l][r]表示合并区间[l,r]的最小费用 状态转移方程dp[l][r] ...
- 洛谷 P5569 [SDOI2008]石子合并 GarsiaWachs算法
石子合并终极通用版 #include<bits/stdc++.h> using namespace std ; ]; int n,t,ans; void combine(int k) { ...
- 直线石子合并(区间DP)
石子合并 时间限制:1000 ms | 内存限制:65535 KB 描述有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费 ...
- 石子合并(NOI1995)
石子合并(NOI1995) 时间限制: 1 Sec 内存限制: 128 MB提交: 90 解决: 48[提交][状态][讨论版] 题目描述 在操场上沿一直线排列着 n堆石子.现要将石子有次序地合并 ...
随机推荐
- mysql 表连接
1.子查询是指在另一个查询语句中的SELECT子句. 例句: SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); 其中,SELECT ...
- Ajax应用-定义一套自己的Ajax框架
—————————————————————————— <script type="text/javascript"> //定义个一个functio ...
- Hibernate 关系映射方式(1)
来源:本文转载自:http://blog.csdn.net/huangaigang6688/article/details/7761310 Hibernate映射解析——七种映射关系 首先我们了解一个 ...
- ios屏幕
设备 屏幕尺寸 分辨率(pt) Reader 分辨率(px) 渲染后 PPI iPhone 3GS 3.5吋 320x480 @1x 320x480 163 iPhone 4/4s 3.5吋 32 ...
- MyBatis-xml配置SQL文件中,传入List数组、基本类型String、int……、与自定义类型的方法
//基本类型 @Override public String queryItemNumber(String packId) throws Exception { // TODO Auto-genera ...
- 用sql server的sql语句算一个empty GUID
在C#中得到一个empty GUID的方法是: Guid id= Guid.Empty; 那么在SQL Server Management Studio中怎样得到一个empty GUID呢? 方法有两 ...
- Creating your own header file in C
终于跑起来了,含自定义 include .h 的c语言程序,超开心呀! header files contain prototypes for functions you define in a .c ...
- 查找mysql数据库中所有包含特定名字的字段所在的表
整个数据库查找 placement 字段: select * from INFORMATION_SCHEMA.columns where COLUMN_NAME Like '%placement%'; ...
- c++内存流
1.MemoryStream.h文件内容 ifndef _MEM_STREAM_H_ #define _MEM_STREAM_H_ #include <string> class CMem ...
- easyui formatter 返回easyui组件
<table id="dg2" title="标题" style="width:400px;float: left;"> < ...