石子合并问题--圆形版

Time Limit: 1000ms
Memory Limit: 32768KB

This problem will be judged on HRBUST. Original ID: 1819
64-bit integer IO format: %lld      Java class name: Main

 
在圆形操场上摆放着一行共n堆的石子。现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆石子数记为该次合并的得分。请编辑计算出将n堆石子合并成一堆的最小得分和将n堆石子合并成一堆的最大得分。

Input

输入有多组测试数据。

每组第一行为n(n<=100),表示有n堆石子,。

二行为n个用空格隔开的整数,依次表示这n堆石子的石子数量ai(0<ai<=100)

Output

每组测试数据输出有一行。输出将n堆石子合并成一堆的最小得分和将n堆石子合并成一堆的最大得分。 中间用空格分开。

Sample Input

3

1 2 3

Sample Output

9 11

解题:还是区间型dp,其实跟直线版的没什么区别,只要把原来的数组复制一份加到后面,求2n长度的。。。
 #include <iostream>
#include <cstdio>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = ;
int maxS[maxn][maxn],minS[maxn][maxn],sum[maxn];
int main(){
int n;
while(~scanf("%d",&n)){
for(int i = ; i <= n; ++i){
scanf("%d",sum+i);
sum[i+n] = sum[i];
sum[i] += sum[i-];
}
for(int i = ; i <= n; ++i)
sum[i+n] += sum[i+n-];
int m = n<<,maxAns = -INF,minAns = INF;
for(int j = ; j <= n; ++j){
for(int i = ; i + j - <= m; ++i){
int t = i + j - ;
int tmp = sum[t] - sum[i-];
minS[i][t] = INF;
maxS[i][t] = -INF;
for(int k = i; k < t; ++k){
minS[i][t] = min(minS[i][t],minS[i][k]+minS[k+][t]+tmp);
maxS[i][t] = max(maxS[i][t],maxS[i][k]+maxS[k+][t]+tmp);
}
}
}
for(int i = ; i <= n; ++i){
minAns = min(minAns,minS[i][i+n-]);
maxAns = max(maxAns,maxS[i][i+n-]);
}
printf("%d %d\n",minAns,maxAns);
}
return ;
}

 

HRBUST 1819 石子合并问题--圆形版的更多相关文章

  1. HRBUST - 1819 石子合并问题--圆形版(区间dp+环形+四边形优化)

    石子合并问题--圆形版 在圆形操场上摆放着一行共n堆的石子.现要将石子有序地合并成一堆.规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆石子数记为该次合并的得分.请编辑计算出将n堆石子合并成一堆的 ...

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

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

  3. 石子合并(直线版+环形版)&(朴素写法+四边形优化+GarsiaWachs算法)

    石子合并-直线版 (点击此处查看题目) 朴素写法 最简单常见的写法就是通过枚举分割点,求出每个区间合并的最小花费,从而得到整个区间的最小花费,时间复杂度为O(n^3),核心代码如下: ; i < ...

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

    t题目链接:https://vjudge.net/problem/HRBUST-1818 思路:一段已经合并的区间,分成两段区间,遍历所有能分开的区间. 代码有注释,基本就这样一个简单是思路. #in ...

  5. HRBUST - 1818 石子合并 区间dp入门

    有点理解了进阶指南上说的”阶段,状态和决策“ /* 区间dp的基础题: 以区间长度[2,n]为阶段,枚举该长度的区间,状态dp[l][r]表示合并区间[l,r]的最小费用 状态转移方程dp[l][r] ...

  6. 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]); ...

  7. HRBUST 1819

    石子合并问题--圆形版 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 61(27 users) Total Accepted: 26( ...

  8. 洛谷 P5569 [SDOI2008]石子合并 GarsiaWachs算法

    石子合并终极通用版 #include<bits/stdc++.h> using namespace std ; ]; int n,t,ans; void combine(int k) { ...

  9. NOI1995 石子合并 [Luogu P1880]

    一道区间dp的模板题,这里主要记一下dp时环形数据的处理. 简略版:方法一:枚举分开的位置,将圈化为链,因此要做n次. 方法二:将链重复两次,即做一个2n-1长度的链,其中第i(i<=n)堆石子 ...

随机推荐

  1. java 基本类型、包装类、字符串之间的转换

    1.基本类型和包装类 基本类型和包装类可通过自动装箱和拆箱实现. int i = 24; Integer a = new Integer(i); //手动装箱 Integer b = i; //自动装 ...

  2. 安卓安装提示:Android SDK requires Android Developer Toolkit version 21.1.0 or above. (错误解决方法)

    安卓安装提示:Android SDK requires Android Developer Toolkit version 21.1.0 or above.  (错误解决方法) 主要是因为版本号不正确 ...

  3. django 笔记14 中间件

    用户请求->中间件->urls->views->返回字符串->中间件->用户浏览器 settings MIDDLEWARE里面都是中间件 有的地方叫管道 请求来的时 ...

  4. 程序Yuan,eclipse你,会用吗?

    程序Yuan,用eclipse敲代码时还在使用alt+/吗,还在为格式化代码ctrl+shift+f快捷键不快捷发愁吗? 如果是,那么这篇就适合你,请继续往下看. ①设置代码提示快捷键         ...

  5. UI Framework-1: UI Development Practices

    UI Development Practices Guidelines Principles for developing for Chrome. These best practices cente ...

  6. 禁用cache

    Z:\src\services\network\network_context.cc:http_cache_enabled

  7. [NOI2012]随机数生成器 矩阵乘法

    Code: #include<cstdio> #include<algorithm> #include<iostream> #include<cstring& ...

  8. php重新编译,gd扩展支持jpeg文件

    晚上写东西的时候,报了一个错误: Call to undefined function imagecreatefromjpeg() 没有开启 jpeg 支持?原来是默认安装的 gd 扩展默认不支持 j ...

  9. 2019 前端面试题汇总(主要为 Vue)

    原文链接:点我 由于我的技术栈主要为Vue,所以大部分题目都是Vue开发相关的. 1. 谈谈你对MVVM开发模式的理解 MVVM分为Model.View.ViewModel三者. Model:代表数据 ...

  10. NOIP2013 货车运输 倍增

    问题描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能 ...