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

石子合并(区间dp典型例题)

Description

有n堆石子排成一行,每次选择相邻的两堆石子,将其合并为一堆,记录该次合并的得分为两堆石子个数之和。已知每堆石子的石子个数,求当所有石子合并为一堆时,最小的总得分。

Input

第一行一个整数n(1 <= n <= 200),表示石子堆数; 第二行n个整数a(1 <= a <= 100),表示每堆石子的个数。

Output

一个整数,表示最小总得分。

Sample Input

5
7 6 5 7 100

Sample Output

175

Source

Unknown
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<set>
#include<vector>
#include<map>
#include<cmath>
#define Inf 0x3f3f3f3f
const int maxn=1e5+5;
typedef long long ll;
using namespace std;
int a[205],g[205][205],sum[205];
int dp[205][205];
int main()
{
   int n;
   cin>>n;
   
   for(int t=1;t<=n;t++)
   {
       scanf("%d",&a[t]);
   }
   for(int t=1;t<=n;t++)
   {
       sum[t]=sum[t-1]+a[t]; 
   }
   memset(dp,Inf,sizeof(dp));
   for(int t=1;t<=n;t++)
   {
       for(int j=t;j<=n;j++)
       {
           g[t][j]=sum[j]-sum[t-1];
    }
   }
   for(int t=1;t<=n;t++)
   {
       dp[t][t]=0;
   }
   for(int l=1;l<n;l++)
   {
       for(int j=1;j+l<=n;j++)
       {
           int r=j+l;
           for(int k=j;k<r;k++)
           {
               dp[j][r]=min(dp[j][r],dp[j][k]+dp[k+1][r]+g[j][k]+g[k+1][r]); 
        }
    }
   }
   cout<<dp[1][n]<<endl;
   return 0;
}

 

转载于:https://www.cnblogs.com/Staceyacm/p/11228382.html

相关文章:

  • 石子合并2(环形求最优解 区间dp)
  • 恢复系统管理员密码的五大奇招
  • P1082 同余方程(拓展欧几里德)
  • Mac下eclipse安装SVN插件
  • 程序员真的很懒
  • 【Android应用开发】-(9)应用程序安装卸载原理
  • TCP/IP:网络因此互联
  • 公式输入较好的参考
  • K - Queries for Number of Palindromes(区间dp+容斥)
  • ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘
  • IDEA等全家桶设置Ctrl+滚轮调整字体大小
  • 怎样卸载外壳扩展的DLL?
  • 具有自动恢复功能的通知栏图标控件
  • Win7编程:在按钮中加入管理员权限运行
  • 反射概念
  • 《剑指offer》分解让复杂问题更简单
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【React系列】如何构建React应用程序
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • docker python 配置
  • hadoop集群管理系统搭建规划说明
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript 基础知识 - 入门篇(一)
  • JAVA之继承和多态
  • MySQL用户中的%到底包不包括localhost?
  • pdf文件如何在线转换为jpg图片
  • Tornado学习笔记(1)
  • 从零开始的无人驾驶 1
  • 关于Java中分层中遇到的一些问题
  • 驱动程序原理
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何利用MongoDB打造TOP榜小程序
  • 思考 CSS 架构
  • 《天龙八部3D》Unity技术方案揭秘
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #QT(一种朴素的计算器实现方法)
  • $refs 、$nextTic、动态组件、name的使用
  • (1)常见O(n^2)排序算法解析
  • (规划)24届春招和25届暑假实习路线准备规划
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)winform之ListView
  • (转)关于pipe()的详细解析
  • .Net 8.0 新的变化
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net wcf memory gates checking failed
  • .NET 回调、接口回调、 委托
  • .Net 中Partitioner static与dynamic的性能对比
  • .netcore 获取appsettings
  • .NET中的Exception处理(C#)
  • .sys文件乱码_python vscode输出乱码
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解