时间限制: 10 s

空间限制: 256000 KB

题目等级 : 黄金 Gold

 查看运行结果
 
 
题目描述 Description

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

输入描述 Input Description

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

输出描述 Output Description

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

样例输入 Sample Input

4
4 4 5 9

样例输出 Sample Output

43
54

数据范围及提示 Data Size & Hint

经典的区间动态规划。

分类标签 Tags 点此展开

 
 
 
代码:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
],f[][],g[][],maxn,minn=;
int main()
{
    scanf("%d",&n);
    ;i<=n;i++)
    {
        scanf("%d",&a[i]);
        a[n+i]=a[i];
     }
    ;i<=*n;i++)
     a[i]+=a[i-];
    memset(f,,sizeof(f));
    memset(g,,sizeof(g));
    ;i<=*n;i++)
     f[i][i]=g[i][i]=;
    *n;i>=;i--)
      ;j<=*n;j++)
        for(int k=i;k<j;k++)
        {
            f[i][j]=min(f[i][j],f[i][k]+f[k+][j]+a[j]-a[i-]);
            g[i][j]=max(g[i][j],g[i][k]+g[k+][j]+a[j]-a[i-]);
         }
    ;i<=n;i++)
     {
         minn=min(minn,f[i][i+n-]);
        maxn=max(maxn,g[i][i+n-]);
          }
    printf("%d\n%d",minn,maxn);
    ;
 } 

注意:

拿到这个题以后我激动了半天,本以为和石子合并一样,让后我就哗哗哗打上了代码,交了两次,结果全wa。

后来才发现,原来这是个环状的!!!

所以,我们就根据上一个题:能量项链来做这个题。

首先我们先化环为链,开一个两倍数组,然后把相邻的累加;

其余的做法就和石子合并一样了!

枚举长度的

#include <algorithm>
#include <cstdio>
#define N 1015

using namespace std;

bool if_;
char ch;
int n,num[N];
int maxn,minn=1e7;
int f_max[N][N],f_min[N][N];

void read(int &x)
{
    if_=;x=;
    ch=getchar();
    ')
    {
        ;
        ch=getchar();
    }
    ')
    {
        x=x*+ch-';
        ch=getchar();
    }
    ;
}

int main()
{
    read(n);
    ;i<=n;i++)
        read(num[i]),num[i+n]=num[i],num[i]+=num[i-];
    ;i<=n*;i++)
        num[i]+=num[i-];
    ;i<=n;i++)
        f_min[i][i]=f_max[i][i]=;
    ;len<=n;len++)
        *n-len;i>=;i--)
        {
            ;
            f_min[i][j]=1e7;
            f_max[i][j]=;
            for(int k=i;k<j;k++)
            {
                f_min[i][j]=min(f_min[i][j],f_min[i][k]+f_min[k+][j]+num[j]-num[i-]);
                f_max[i][j]=max(f_max[i][j],f_max[i][k]+f_max[k+][j]+num[j]-num[i-]);
            }
        }
    ;i<=n;i++)
     {
         minn=min(minn,f_min[i][i+n-]);
        maxn=max(maxn,f_max[i][i+n-]);
          }
    printf("%d\n%d",minn,maxn);
    ;
}

codevs——2102 石子归并 2(区间DP)的更多相关文章

  1. codevs——1048 石子归并 (区间DP)

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解       题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并 ...

  2. codevs 2102 石子归并2

    传送门 2102 石子归并 2  时间限制: 10 s  空间限制: 256000 KB  题目等级 : 黄金 Gold   题目描述 Description 在一个园形操场的四周摆放N堆石子,现要将 ...

  3. 51nod 1021 石子归并 【区间DP】

    1021 石子归并  基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子 ...

  4. 石子归并(区间dp 模板)

    区间dp入门 #include<iostream> #include<cstdio> #include <cctype> #include<algorithm ...

  5. CODEVS 2102 石子归并 2

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

  6. 2102 石子归并 2codevs

    2102 石子归并 2codevs 题目描述 Description 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为 ...

  7. Codevs 3002 石子归并 3(DP四边形不等式优化)

    3002 石子归并 3 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次 ...

  8. Codevs 1048 石子归并

    1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合 ...

  9. codevs 1048石子归并

    传送门 1048 石子归并  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], ...

随机推荐

  1. Diycode开源项目 LoginActivity分析

    1.首先看一下效果 1.1.预览一下真实页面 1.2.分析一下: 要求输入Email或者用户名,点击编辑框,弹出键盘,默认先进入输入Email或用户名编辑框. 点击密码后,密码字样网上浮动一段距离,E ...

  2. Python协程详解(二)

    上一章,我们介绍了Python的协程,并讲到用yield达到协程的效果,这一章,我们来介绍yield from的结构和作用 我们先来对比下yield和yield from的用法 def first_g ...

  3. 微服务化的不同阶段 Kubernetes 的不同玩法

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 作为容器集群管理技术竞争的大赢家,Kubernetes已经和微服务紧密联系,采用Kubernetes的企业往往都开始了微服务架构的探索.然而不同企业 ...

  4. 《HTTP协议详解》读书笔记---请求篇之消息报头

    不管是请求消息还是响应消息都包含消息报头,那么消息报头包含哪些内容?他们都代表什么含义呢?以下将带着 这些问题去学习消息报头. http消息(不管是请求消息还是响应消息)都是由开始行,消息报头(可选) ...

  5. psql 工具详细使用介绍

    psql 介绍 psql 是 PostgreSQL 中的一个命令行交互式客户端工具, 它允许你交互地键入 SQL 命令,然后把它们发送给 PostgreSQL 服务器,再显示 SQL 或命令的结果. ...

  6. PAT——乙级1032

    这些题也确实简单,但是我还是想做做,多熟悉一下C++,毕竟实践是检验真理的唯一标准,有很多小知识点自己做了才知道. 这个题是 1032 挖掘机技术哪家强 (20 point(s)) 为了用事实说明挖掘 ...

  7. 菜鸟之路——机器学习之线性回归个人理解及Python实现

    这一节很简单,都是高中讲过的东西 简单线性回归:y=b0+b1x+ε.b1=(Σ(xi-x–)(yi-y–))/Σ(xi-x–)ˆ2       b0=y--b1x-    其中ε取 为均值为0的正态 ...

  8. css的float和position属性

    (1)float的简单用法 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  9. Spring框架配置beans.xml扩展

    Spring学习笔记(二) 续Spring 学习笔记(一)之后,对Spring框架XML的操作进行整理 1 什么是IOC(DI) IOC = inversion of control   控制反转 D ...

  10. node中fileSystem改promise

    请注意,fs的大部分函数回调只会返回一个error参数,所以只要判断error为false的情况下就返回成功,无论有没有第二个参数. 另外exists需要单独包装,因为第一个参数就代表返回内容 con ...