https://www.luogu.org/problemnew/show/P1880

区间dp,顾名思义,是以区间为阶段的一种线性dp的拓展

状态常定义为$f[i][j]$,表示区间[i,j]的某种解;

通常先枚举区间长度,再枚举左端点,最后枚举断点(k)

石子合并便是一道经典的区间dp

#include <bits/stdc++.h>
#define read read()
#define up(i,l,r) for(int i = (l);i <= (r); i++)
#define inf 0x3f3f3f3f
using namespace std;
int read
{int x = 0;char ch = getchar();while(ch < 48 || ch > 57) ch = getchar();while(ch>= 48 && ch <= 57) {x = 10 * x + ch - 48; ch = getchar();}return x;
}
const int N = 205;
int n,cnt[N],sum[N],f1[N][N],f2[N][N];
int main()
{freopen("stone.in","r",stdin);n = read;//memset(f2,0x3f,sizeof(f2)); up(i,1,n) cnt[i] = cnt[i + n] = read;//,f1[i][i] = 0,f2[i][i] = 0;  -> up(i,1,((n<<1)-1)) sum[i] = sum[i - 1] + cnt[i];//前缀和            ->[1,2n-1] 处理环; up(L,2,n)//[2,n] //枚举区间长度 up(i,1,( (n<<1) - L + 1) ) //枚举左端点
            {int j = i + L - 1;//右端点; f1[i][j] = 0; f2[i][j] = inf;//初始化; up(k,i,(j - 1))//枚举断点 [i,j)
                {f1[i][j] = max(f1[i][j],f1[i][k] + f1[k + 1][j]);f2[i][j] = min(f2[i][j],f2[i][k] + f2[k + 1][j]);}f1[i][j] += (sum[j] - sum[i - 1]);f2[i][j] += (sum[j] - sum[i - 1]);//!!加上这次合并[i,j]的分数;
            }int max_ans = 0,min_ans = inf;up(i,1,n)//[1,n]
    {int j = i + n - 1;max_ans = max(max_ans,f1[i][j]);min_ans = min(min_ans,f2[i][j]);}printf("%d\n",min_ans);printf("%d",max_ans);return 0;
}

转载于:https://www.cnblogs.com/mzg1805/p/10316214.html

区间DP初探 P1880 [NOI1995]石子合并相关推荐

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

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

  2. P1880 [NOI1995]石子合并

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

  3. 【动态规划dp】区间DP模板 Acwing 282. 石子合并 | P3205 [HNOI2010]合唱队

    区间DP 模板 282. 石子合并 #include<iostream> #include<cmath> #include<algorithm> #include& ...

  4. luogu P1880 [NOI1995]石子合并

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

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

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

  6. [NOI1995]石子合并

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

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

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

  8. P1063 能量项链(C++_区间dp)

    题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...

  9. 区间DP(基础+提高)

    区间DP 1.区间dp的定义 2.石子合并 2.1 思路 2.2 时间复杂度分析 2.3 AC代码 3.环形石子合并 3.1思路 3.2 时间复杂度优化 3.3 AC代码 4.能量项链 4.1思路 4 ...

最新文章

  1. js变量以及其作用域详解
  2. java自动装箱性能
  3. ****题(alb)
  4. 浙大 CBIST团队发布高质量的多中心MRI公开数据集
  5. Android中的ImageView的getDrawableCache获取背景图片的时候注意的问题
  6. 注意,ruby循环体定义的变量在结束时后,变量还存在
  7. Linux如何通过csv导入neo4j,neo4j-import导入CSV 数据
  8. MIT自然语言处理第四讲:标注
  9. 安卓学习-界面-布局-FrameLayout
  10. mysql 导出表结构和表数据 mysqldump用法(自己测试了)
  11. 2010年清华大学计算机研究生机试真题
  12. CodeForces - 1331E Jordan Smiley(图形转换)
  13. mysql 字段 中文_如何配置mysql支持中文字段名与中文字段
  14. Waymo离线点云序列3D物体检测网络 (3D Auto Labeling): Offboard 3D Object Detection from Point Cloud Sequences
  15. Lemmy仿Reddit社区 v0.8.10源码
  16. python中的import详解_如何在python中import
  17. Transact-SQL命令语法-数据表
  18. 集合python_Python 集合
  19. 怎么不能锁门_镜子能不能对着床
  20. python中字符串转元组时的小技巧

热门文章

  1. qt使用自带的日志输出实例输出日志时,在日志中显示行数
  2. C语言 __DATE__ - C语言零基础入门教程
  3. Python globals 函数 - Python零基础入门教程
  4. java空心字木塔_我国七个千年古塔:第四个空心没有塔顶,最后一个是木塔无钉无铆...
  5. 打了断点为直接运行完_BBC主持人多次打断,香港大律师忍不住发飙
  6. echarts地图api series_echarts学习(4)——地图实现
  7. python3中的int类型占64位,有没有什么办法来强制Python来使用64位整数的Windows?
  8. 升级鸿蒙系统无法选择应用,申请鸿蒙系统有一个应用选择怎么选择呢
  9. 音频服务器未显示,Win7系统没有声音提示“一个或多个音频服务未运行”如何解决...
  10. zenmap扫描出来linux,如何在Linux上使用NMAP安全扫描器