洛谷 P1880 [NOI1995]石子合并(区间DP)
2024-10-08 12:53:02
嗯...
题目链接:https://www.luogu.org/problem/P1880
这道题特点在于石子是一个环,所以让a[i+n] = a[i](两倍长度)即可解决环的问题,然后注意求区间最小值的时候dp要初始化为一个很大的数...
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring> using namespace std; int dp1[][], dp2[][], sum[], a[]; int main(){
int n;
scanf("%d", &n);
for(int i = ; i <= n; i++) {scanf("%d", &a[i]); a[i + n] = a[i];}
for(int i = ; i <= n * ; i++) {sum[i] = sum[i - ] + a[i];}
for(int l = ; l <= n; l++){
for(int i = ; i <= * n; i++){
int j = i + l;
dp2[i][j] = 0x3f3f3f;// 求最小值初始化为很大
if(j > * n) break;
for(int k = i; k < j; k++){
dp1[i][j] = max(dp1[i][j], dp1[i][k] + dp1[k + ][j] + sum[j] - sum[i - ]);
dp2[i][j] = min(dp2[i][j], dp2[i][k] + dp2[k + ][j] + sum[j] - sum[i - ]);
}
}
}
int maxx = , minn = 0x3f3f;
for(int i = ; i <= n; i++){
int j = i + n - ;
maxx = max(maxx, dp1[i][j]);
minn = min(minn, dp2[i][j]);
}
printf("%d\n%d\n", minn, maxx);
return ;
}
AC代码
最新文章
- Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验
- gdb 调试多线程
- 利用httpd对tomcat进行负载均衡配置
- java Collections.sort()实现List排序自定义方法
- Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的关系
- Linux三剑客之awk
- linux基础-第十四单元 Linux网络原理及基础设置
- C++专题 - 修练8年C++面向对象程序设计之体会 林锐
- Innodb_buffer_pool_pages_dirty [一个故事@MySQL DBA]MYSQL
- Java调用R(一)_Rserve
- [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(五)
- signalr中Group 分组群发消息的简单使用
- 自定义注解,andjdk提供的元注解
- 简易promise的实现(二)
- sql注入、csrf
- mysql之事务管理
- 448C - Painting Fence(分治)
- 阿里服务器配置swap
- FastClick用法
- Scala学习(七)练习
热门文章
- C++ 实例练习-替换原生数组
- 番外:如何克隆可刷新的PDB(Refreshable PDB)
- android button setMinHeight setMinWidth 无效解决办法
- BeautifulSoup的基本使用
- break continue goto
- SQL中 select count(1) count中的1 到底是什么意思呢?和count(*)的区别
- 怎么把VS里的scanf_s换成scanf
- Java 读取网络资源文件 获取文件大小 MD5校验值
- Js选择器总结
- [Python]python中assert和isinstance的用法