NOI 1995 石子合并
2016-03-05 11:17
218 查看
http://www.luogu.org/problem/show?pid=1880#
合并石子的加强版(不过这可是95年的NOI的题,准确说应该是合并石子是它的削弱版吧。。。),环的处理就是在链的后面再来一遍链,然后枚举一下起点终点,就和合并石子一样了。。。
合并石子的加强版(不过这可是95年的NOI的题,准确说应该是合并石子是它的削弱版吧。。。),环的处理就是在链的后面再来一遍链,然后枚举一下起点终点,就和合并石子一样了。。。
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<algorithm> #define INF 0x3f3f3f3f using namespace std; int f1[2100][2100],f2[2100][2100],a[2100],n,x; int main() { memset(f1,0x3f,sizeof(f1)); memset(f2,0,sizeof(f2)); scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&x); a[i]=a[i-1]+x; f1[i][i]=0;f1[i+n][i+n]=0; f2[i][i]=0;f2[i+n][i+n]=0; } for(int i=1;i<=n;i++) a[i+n]=a +a[i]; for(int i=2*n;i>=1;i--) for(int j=i+1;j<=i+1+n;j++) for(int k=i;k<j;k++) { f1[i][j]=min(f1[i][j],f1[i][k]+f1[k+1][j]+a[j]-a[i-1]); f2[i][j]=max(f2[i][j],f2[i][k]+f2[k+1][j]+a[j]-a[i-1]); } int ans1=INF,ans2=0; for(int i=1;i<=n;i++) { ans1=min(ans1,f1[i][i+n-1]); ans2=max(ans2,f2[i][i+n-1]); } printf("%d\n%d",ans1,ans2); return 0; }
相关文章推荐
- 面试题
- leetcode169 Majority Element
- 四位漂亮女生将人脸识别算法做到世界第一 现正用“刷脸支付”改变传统金融
- sublime text3插件安装
- java并发编程(2)--volatile(转)
- 前端开发 基础知识 dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算
- Zend Framework动作助手Redirector用法实例详解
- leetcode217 Contains Duplicate
- mysql查询优化以及索引使用
- 外汇储备
- OCX的调试
- Win7配置Nginx+PHP7
- Mac 安装CocoaPods(TC GFW太强)
- leetcode171 Excel Sheet Column Number
- 1015: 【出圈】
- HDU 1498 50 years, 50 colors (二分图最小顶点覆盖)
- C# 【Math】 用法
- 求∏的近似值
- CentOs6.7 python2.6升级到2.7.11
- linux shell 取文件名后缀