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

石子合并

断环为链。

环形的最优合并方式,一定可以展开成长为n的链来处理。

怎样才是最优的合并方式?

n<=100。

枚举处理。

#include<bits/stdc++.h>
using namespace std;

signed main()
{
    int n; 
    cin>>n;
    vector<int>a(n+n+n+1),sum=a;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        a[i+n]=a[i];
    }

    for(int i=1;i<=3*n;i++)
    sum[i]=sum[i-1]+a[i];

    vector<vector<int>>f1(3*n+10,vector<int>(3*n+10,1e9)),f2(3*n+10,vector<int>(3*n+10,0));

    for(int i=1;i<=2*n;i++)
    f1[i][i]=0;

    for(int i=1;i<=2*n;i++)
    f1[i][i+1]=a[i]+a[i+1],
    f2[i][i+1]=a[i]+a[i+1];

    for(int len=3;len<=2*n;len++){
        for(int l=1;l+len-1<=2*n;l++){
            int r=l+len-1;
            for(int i=l;i<r;i++){
                f1[l][r]=min(f1[l][i]+f1[i+1][r]+sum[i]-sum[l-1]+sum[r]-sum[i],f1[l][r]);
                f2[l][r]=max(f2[l][i]+f2[i+1][r]+sum[i]-sum[l-1]+sum[r]-sum[i],f2[l][r]);
            }

        }
    }
    int ans1=f1[1][n],ans2=f2[1][n];
    for(int i=2;i<=n;i++)
    ans1=min(f1[i][i+n-1],ans1),
    ans2=max(f2[i][i+n-1],ans2);

    cout<<ans1<<endl<<ans2;

    
}

25/2/15 

相关文章:

  • windows编译使用gtest
  • SpringBoot3 快速启动框架
  • VS2022中.Net Api + Vue 从创建到发布到IIS
  • Redis的常见数据结构
  • 内容中台驱动企业CMS架构优化与高效策略
  • springCloud-2021.0.9 之 GateWay 示例
  • Android Studio 打包App问题
  • 从0开始的操作系统手搓教程 4:做好准备,跳到加载器(Loader)
  • Word中设置表格在同一页
  • 深入解析SVG图片原理:从基础到高级应用
  • SpringCloud框架下的注册中心比较:Eureka与Consul的实战解析
  • elasticsearch8 linux版以服务的方式启动
  • 基于javaweb的SpringBoot宠物医院管理系统设计和实现(源码+文档+部署讲解)
  • Ubuntu22.04通过Docker部署Jeecgboot
  • 动态规划dp_4
  • 【天地图】绘制、删除点线面
  • 【kafka系列】Kafka如何实现高吞吐量?
  • 一键安装教程
  • Communications link failure异常分析解决
  • 138,【5】buuctf web [RootersCTF2019]I_<3_Flask
  • 首届上海老年学习课程展将在今年10月举办
  • 视频丨习近平主席出席俄方在机场举行的迎宾仪式
  • 国家矿山安全监察局发布《煤矿瓦斯防治能力评估办法》
  • 应对美政策调整:中国重在开放与创新,维护好数据主权
  • 网友建议平顶山请刘昊然任旅游宣传大使,市委:有此设想,正申请经费
  • 上海虹桥机场至北京首都机场快线试运行跨航司自愿签转服务