P1880 [NOI1995]石子合并 区间dp
2024-08-24 15:53:14
#include <bits/stdc++.h>
using namespace std;
const int maxn = ;
const int inf = 0x3f3f3f3f;
int cost1[maxn][maxn], cost2[maxn][maxn]; //当前合并的代价
int dp1[maxn][maxn], dp2[maxn][maxn];
int main() {
int n; cin >> n;
for (int i = ; i <= n; i++) {
cin >> cost1[i][i];
cost2[i][i] = cost1[i][i];
}
for (int i = ; i <= n; i++) {
cost1[n+i][n+i] = cost1[i][i];
cost2[n+i][n+i] = cost2[i][i];
}
n <<= ;
for (int i = ; i <= n/; i++) {
for (int j = ; j <= n-i; j++) {
int x = i+j, y = j+;
for (int k = ; k < i; k++) {
cost1[x][y] = cost1[x-k][y] + cost1[x][y+i-k];
cost2[x][y] = cost2[x-k][y] + cost2[x][y+i-k];
if (dp1[x][y]) dp1[x][y] = min(dp1[x][y],cost1[x][y]+dp1[x-k][y]+dp1[x][y+i-k]);
else dp1[x][y] = cost1[x][y]+dp1[x-k][y]+dp1[x][y+i-k];
if (dp2[x][y]) dp2[x][y] = max(dp2[x][y],cost2[x][y]+dp2[x-k][y]+dp2[x][y+i-k]);
else dp2[x][y] = cost2[x][y]+dp2[x-k][y]+dp2[x][y+i-k];
}
}
}
int mi = inf, mx = ;
n >>= ;
for(int j = ; j <= n; j++) {
mi = min(mi,dp1[n+j][j+]);
}
for(int j = ; j <= n; j++) {
mx = max(mx,dp2[n+j][j+]);
}
cout << mi << endl << mx << endl;
}
最新文章
- Java 消息摘要 散列 MD5 SHA
- R语言学习笔记:小试R环境
- Beta版本贡献比
- IOS 中 NSArray
- [转]php和html混编的三种方式
- 要在一般处理程序中获取其他页面的session值
- HDU 1385 Minimum Transport Cost (Dijstra 最短路)
- selenium 断言与验证
- 《ServerSuperIO Designer IDE使用教程》-4.增加台达PLC驱动及使用教程,从0到1的改变。发布:v4.2.3版本
- iOS聊天客服功能(Udesk)
- Atomikos和GTS-Fescar和TCC-Transaction和TX-LCN分布式事物的比较
- 关于loadtxt编码问题的解决方法
- jctable
- 【Hadoop 分布式部署 九:分布式协作框架Zookeeper架构 分布式安装部署 】
- jquery-menu-aim插件实现二级导航
- 电子表格Excel
- zepto中的touch库与fastclick
- 03: shell简单监控脚本
- POJ 2393
- SQLServer------插入数据时出现IDENTITY_INSERT错误