区间动态规划的经典题,关于区间dp,状态定义是很显然的,定义f[i][j]表示把i~j这一区间合并花费的最小值,若i=j,则f[i][j]=0,若i≠j,则在i,j当中必定有一点k,使得i,j的区间先合并成i,k和k+1,j,然后合并成i,j.因此,对于每一对i,j,我们都枚举k,那么f[i][j]=min(f[i][k]+f[k+1][j]).然后我们预处理出合并的花费,相加即可。

另外,我们在循环的时候一定要注意阶段,状态,决策三者从外到内循环。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 int sum[310],f[310][310],n;
 6 int main() {
 7     cin>>n;
 8     memset(f,0x3f,sizeof(f));
 9     for(int i=1,x;i<=n;i++) {
10         cin>>x;
11         f[i][i]=0;
12         sum[i]=sum[i-1]+x;
13     }
14     for(int i=2;i<=n;i++) {
15         for(int l=1;l<=n-i+1;l++) {
16             int r=l+i-1;
17             for(int k=l;k<r;k++)
18                 f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]);
19             f[l][r]+=sum[r]-sum[l-1];
20         }
21     }
22     cout<<f[1][n]<<endl;
23     return 0;
24 }

AC Code

转载于:https://www.cnblogs.com/shl-blog/p/10664295.html

【NOI1995】石子合并相关推荐

  1. [NOI1995]石子合并

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

  2. P1880 [NOI1995] 石子合并 的详解

    P1880 [NOI1995] 石子合并 [题目网站] [NOI1995] 石子合并 - 洛谷 [题目考点] 区间动态规划 [题目思路] 输入数组,把长度翻倍 初始化最小值数组 一个一个区间地填 找出 ...

  3. 区间DP初探 P1880 [NOI1995]石子合并

    https://www.luogu.org/problemnew/show/P1880 区间dp,顾名思义,是以区间为阶段的一种线性dp的拓展 状态常定义为$f[i][j]$,表示区间[i,j]的某种 ...

  4. P1880 [NOI1995]石子合并

    蒟蒻做NOI系列的题,好慌...... 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试 ...

  5. 洛谷P1880 [NOI1995]石子合并

    放题解 题目传送门 放代码 转载于:https://www.cnblogs.com/liuyuxinblog/p/10799085.html

  6. luogu P1880 [NOI1995]石子合并

    咕咕咕 说好把济南集训时做的题写写题解还是鸽了然后因为太无聊又来续上了w 传送门~xiu 一道dp 具体是啥dp呢我去看看题解咋说 嗯 区间dp(跟我想的一样 把环拆成链来做 n的范围比较小就直接枚举 ...

  7. 石子合并[DP-N3]

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

  8. CSP认证201612-4 压缩编码[C++题解]:区间dp、huffman树、石子合并

    题目分析 来源:acwing 分析: 本题难在想到是区间dp.想到区间dp之后,这就是石子合并的代码直接默写. 那么是如何建模的呢?我们把huffman编码(这里要求按照字典序大小编码,和huffma ...

  9. 算法基础课-动态规划-区间dp-AcWing 282. 石子合并:区间dp

    文章目录 题目分析 题目链接 题目分析 只能合并相邻两堆.求体力最小值 数据比较弱,最多300堆,每堆重量不超过1000. 状态表示 f[i][j]表示合并区间[i,j]需要的最小体力 状态转移 把区 ...

  10. 51nod 1022 石子合并v2

    就是石子合并的数据范围变为了1e3 经典四边形优化区间dp const int N = 2e3 + 10; const long long inf = 1e18; long long dp[N][N] ...

最新文章

  1. Android Market 链接的生成与分享
  2. CSV XLS文件区别
  3. 网络编程学习笔记(服务器端进程终止)
  4. iOS 获取self类型
  5. matlab中tenmat,tensor_toolbox_2.5 2014最新的张量的工具包, 中包含了各种 函数。 matlab 238万源代码下载- www.pudn.com...
  6. SAP ABAP RFC table administration
  7. 代码中 密码存储_你还记得浏览器自动存储的密码吗?用js代码恢复一下记忆吧...
  8. this关键字实现串联构造函数调用
  9. appium+python自动化51-adb文件导入和导出(pull push)
  10. dede搜索正文内容search.php,织梦dede后台怎么查找文章内容关键词
  11. C#GDI绘制渐变线条,可用于添加阴…
  12. ACM时间复杂度及算法的选择分析
  13. CSND的Markdown使用练习
  14. ios安卓模拟器_雷电模拟器4.0.5去广告修改版
  15. linux分段内存管理中的GDT,LDT,GDTR,LDTR
  16. Win10右下角提示“已禁用IME”的多种解决方法汇总
  17. cesium 学习笔记(三) 在地图上放置3D建筑模型
  18. 【python学习】自定义三维向量类 加减乘除查看值和长度
  19. 多因子选选股MATLAB代码,MatlabCode 多因子模型构建。多因子模型是量化选股中最重要的一类模型 联合开发网 - pudn.com...
  20. 数字通信中为什么需要时钟线

热门文章

  1. 截屏工具Snipaste使用指南
  2. linux fedora安装simplescreenrecorder
  3. Goland设置Go相关环境
  4. spark task和stage划分原理
  5. kafka架构:分区机制详解
  6. Python Django 全局上下文代码示例
  7. Redis集群分片存储原理图
  8. Java客户端操作elasticsearch--查询索引库(带分页)
  9. jQuery ajax简单案例-验证用户名是否可用
  10. JTextPane设置颜色出现的问题