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

题解:洛谷 P1880 [NOI1995] 石子合并

【题目来源】

洛谷:P1880 [NOI1995] 石子合并 - 洛谷

【题目描述】

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

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

【输入】

数据的第 \(1\) 行是正整数 \(N\),表示有 \(N\) 堆石子。

\(2\) 行有 \(N\) 个整数,第 \(i\) 个整数 \(a_i\) 表示第 \(i\) 堆石子的个数。

【输出】

输出共 \(2\) 行,第 \(1\) 行为最小得分,第 \(2\) 行为最大得分。

【输入样例】

4
4 5 9 4

【输出样例】

43
54

【算法标签】

《洛谷 P1880 石子合并》 #动态规划DP# #区间DP# #四边形不等式# #NOI#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 205;  // 定义最大石子堆数的两倍int n;              // 石子堆数
int a[N];           // 存储石子数量的数组(环形展开为两倍长度)
int sum[N];         // 前缀和数组
int f_min[N][N];    // f_min[i][j]表示合并i到j堆的最小得分
int f_max[N][N];    // f_max[i][j]表示合并i到j堆的最大得分
int ans_min = 1e9;  // 最小得分结果
int ans_max;        // 最大得分结果int main()
{// 输入石子堆数和每堆石子数量cin >> n;for (int i = 1; i <= n; i++){cin >> a[i];a[i + n] = a[i];  // 环形问题展开为两倍长度}// 初始化最小得分数组为极大值memset(f_min, 0x3f, sizeof(f_min));// 初始化前缀和数组和单堆得分为0for (int i = 1; i <= 2 * n; i++){f_min[i][i] = 0;              // 单堆不需要合并,得分为0sum[i] = sum[i - 1] + a[i];    // 计算前缀和}// 动态规划处理所有可能的合并区间for (int len = 2; len <= n; len++)        // 枚举区间长度{for (int i = 1; i + len - 1 <= 2 * n; i++)  // 枚举区间起点{int j = i + len - 1;             // 区间终点for (int k = i; k < j; k++)      // 枚举分割点{// 更新最小得分f_min[i][j] = min(f_min[i][j], f_min[i][k] + f_min[k + 1][j] + sum[j] - sum[i - 1]);// 更新最大得分f_max[i][j] = max(f_max[i][j],f_max[i][k] + f_max[k + 1][j] + sum[j] - sum[i - 1]);}}}// 在所有可能的n长度区间中寻找最优解for (int i = 1; i <= n; i++){ans_min = min(ans_min, f_min[i][i + n - 1]);ans_max = max(ans_max, f_max[i][i + n - 1]);}// 输出结果cout << ans_min << endl << ans_max << endl;return 0;
}

【运行结果】

4
4 5 9 4
43
54
http://www.jsqmd.com/news/397107/

相关文章:

  • COMSOL 隧道断层突水案例探究:不同开挖步数下的围岩奥秘
  • 题解:洛谷 P1435 [IOI 2000] 回文字串
  • Java 时间类(中):JDK8 全新时间 API 详细教程
  • 降AI率常见误区TOP10:别再走弯路了!2026年最全避坑指南
  • <P5464 缩小社交圈>
  • 支持实时预览与高质量导出的专业封面设计工具,完全免费:西瓜封面设计
  • 文科论文降AI比理工科更难?文科生专属降AI方案全解析
  • 题解:洛谷 P1541 [NOIP 2010 提高组] 乌龟棋
  • PEM 电解槽直流道两相流模拟:从建模到求解
  • 手把手教你使用vscode开发stm32!
  • 题解:洛谷 P1854 [IOI 1999] 花店橱窗布置
  • 题解:洛谷 P4310 绝世好题
  • 中华民族音乐传承出版工程服务平台界面设计
  • 用DeepSeek写的论文怎么降AI率?2026最新实操教程手把手教你
  • 2026毕业季降AI全攻略:从论文写作到最终提交一站式指南
  • 法智学教育软件课件UI设计
  • 【Python】【机器学习】集成算法(随机森林、提升算法)
  • 中小企业全生命周期知识产权管理100问:从初创到成熟,一文读懂核心要点
  • 题解:洛谷 P1004 [NOIP 2000 提高组] 方格取数
  • 基于高频信号的PMSM转矩脉动抑制:一场仿真探索之旅
  • 3分钟搞懂深度学习AI:感知机,AI模仿大脑
  • 题解:洛谷 P2679 [NOIP 2015 提高组] 子串
  • 论文降AI后导师说风格变了怎么办?保持个人写作风格的实用指南
  • 题解:洛谷 P1439 两个排列的最长公共子序列
  • php条件语句(混合php的if语句和js编程)
  • 题解:洛谷 P4933 大师
  • 基于LSTM的共享单车需求预测研究
  • 题解:洛谷 P2285 [HNOI2004] 打鼹鼠
  • 题解:洛谷 P1020 [NOIP 1999 提高组] 导弹拦截
  • 携程任我行礼品卡回收实操步骤 - 京顺回收