当前位置: 首页 > news >正文

石子合并[DP-N3]

题目描述

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

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

输入输出格式

输入格式:

 

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

 

输出格式:

 

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

--------------------------------------------------------

环形DP,前缀和,O(n3)即可

可以i降序j升序,也可以枚举长度

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=105<<2,INF=1e9;
int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int n,a[N],mx=0,mn=INF;
int f[N][N],s[N],d[N][N];
void dp(){
    for(int i=1;i<=2*n;i++)for(int j=1;j<=2*n;j++) d[i][j]=INF,d[i][i]=0;
    
    for(int i=1;i<=2*n;i++) s[i]=s[i-1]+a[i];
//    for(int i=2*n-1;i>=1;i--)
//        for(int j=i+1;j<=2*n&&j-i<n;j++)
//            for(int k=i;k<j;k++){
//                f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]);
//                d[i][j]=min(d[i][j],d[i][k]+d[k+1][j]+s[j]-s[i-1]);
//            }
    for(int l=1;l<n;l++)
        for(int i=1;i<=2*n;i++){
            int j=min(2*n,i+l);
            for(int k=i;k<j;k++){
                f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]);
                d[i][j]=min(d[i][j],d[i][k]+d[k+1][j]+s[j]-s[i-1]);
            }
        }
    
}
int main(int argc, const char * argv[]) {
    n=read();
    for(int i=1;i<=n;i++) a[i]=read(),a[i+n]=a[i];
    dp();
    for(int i=1;i<=n;i++) mx=max(f[i][i+n-1],mx),mn=min(mn,d[i][i+n-1]);
    printf("%d\n%d",mn,mx);
    return 0;
}

 

相关文章:

  • log4j2定期生成和删除过期日志文件的配置
  • 使用netcat进行反弹链接的shellcode
  • mybatis 判断是否传入了某参数
  • sleep()和wait()区别
  • [LeetCode] NO. 387 First Unique Character in a String
  • Linux命令(网络)
  • 抽象工厂的一个范例
  • WebBrowser 和 Win Form 的关闭问题?
  • 蓝鸥Unity开发基础二——课时18 单例
  • 表示数值的字符串
  • 如何配置搜索功能
  • W3bsafe]SQLmap过狗命令的利用+教程
  • Linux的包管理工具介绍
  • Jive论坛与Spring框架
  • 实现支持文件分块多点异步上传的 Web Services 及其客户端(非Web)应用程序调用相关异步执行的 Web Method...
  • 【剑指offer】让抽象问题具体化
  • C# 免费离线人脸识别 2.0 Demo
  • Golang-长连接-状态推送
  • HTML中设置input等文本框为不可操作
  • JS题目及答案整理
  • JS字符串转数字方法总结
  • leetcode讲解--894. All Possible Full Binary Trees
  • MySQL用户中的%到底包不包括localhost?
  • Rancher如何对接Ceph-RBD块存储
  • RxJS: 简单入门
  • Vue全家桶实现一个Web App
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 浮现式设计
  • 悄悄地说一个bug
  • 微信公众号开发小记——5.python微信红包
  • 项目管理碎碎念系列之一:干系人管理
  • 运行时添加log4j2的appender
  • 找一份好的前端工作,起点很重要
  • Semaphore
  • 大数据全解:定义、价值及挑战
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​ubuntu下安装kvm虚拟机
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #FPGA(基础知识)
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Forward) Music Player: From UI Proposal to Code
  • (JS基础)String 类型
  • (阿里云万网)-域名注册购买实名流程
  • (八)Spring源码解析:Spring MVC
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转载)虚函数剖析
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .java 9 找不到符号_java找不到符号
  • .net Application的目录
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例