【区间dp】- P1880 [NOI1995] 石子合并
2024-10-10 08:57:50
记录一下第一道ac的区间dp
题目:P1880 [NOI1995] 石子合并 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
代码:
#include <iostream>
using namespace std;
typedef long long ll;
int a[210], dpmax[210][210], dpmin[210][210], sum[210], ma = -1, mi = 1000000000;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; ++i)
{
cin >> a[i];
sum[i] = sum[i - 1] + a[i];
}
for (int i = n + 1; i <= 2 * n; ++i)
{
a[i] = a[i - n];
sum[i] = sum[i - 1] + a[i];
}
for (int len = 2; len <= n; ++len)
{
for (int i = 1; i <= 2 * n - len + 1; ++i) //延长了一倍,以解决石子成环的问题
{
int j = i + len - 1;
dpmin[i][j] = 1000000000;
for (int k = i; k < j; ++k)
{
dpmax[i][j] = max(dpmax[i][j], dpmax[i][k] + dpmax[k + 1][j] + sum[j] - sum[i - 1]);
dpmin[i][j] = min(dpmin[i][j], dpmin[i][k] + dpmin[k + 1][j] + sum[j] - sum[i - 1]);
}
}
}
for (int i = 1; i <= n; ++i)
{
ma = max(ma, dpmax[i][i + n - 1]);
mi = min(mi, dpmin[i][i + n - 1]);
}
cout << mi << endl
<< ma << endl;
return 0;
}
最新文章
- jQuery实现动态分割
- 多线程编程之Linux环境下的多线程(二)
- 安装ejabberd2并配置MySQL为其数据库
- 不使用var定义变量和使用var的区别
- Visual Studio 2012 编译C++显示cl命令
- Python+Django+SAE系列教程15-----输出非HTML内容(图片/PDF)
- js中boolean类型的理解
- 博客第一篇 osi七层网络传输模型
- IDEA中静态资源无法找到的原因
- jsonp原理和实例详解
- 【题解】Luogu P4450 双亲数
- NOI 2018网络同步赛(游记?)
- MP实战系列(十八)之XML文件热加载
- HTML JS 数据校验
- Mask R-CNN详解和安装
- P4782 【模板】2-SAT 问题 &;&; 2-SAT问题
- 【译】第十篇 Replication:故障排除
- rarcrack
- JavaScript设计模式-14.组合模式实现
- Mastering stack and heap for system reliability