code2102 石子归并2
划分dp
注意环形,需要把原数复制成两份再进行,详见:
http://www.cnblogs.com/FuTaimeng/p/5427426.html
初始条件:dp[i][i]=0
转移方程:dp[i][j] = max/min{ dp[i][u]+dp[u+1][j]+sum(i,j) }
答案:max/min{ dp[i][i+n-1] } i=1 to n+1
代码如下:
#include<iostream>
#include<cstring>
#define Size 105
using namespace std; int n;
int a[Size];
int dp1[Size][Size];//min
int dp2[Size][Size];//max
int sum[Size]; inline int s(int l,int r){return sum[r]-sum[l-];} int main(){
memset(dp1,0x3f,sizeof(dp1));
memset(dp2,-,sizeof(dp2)); cin>>n;
for(int i=;i<=n;i++){
cin>>a[i];
a[i+n]=a[i];
}
for(int i=;i<=*n;i++){
sum[i]=sum[i-]+a[i];
dp1[i][i]=dp2[i][i]=;
}
for(int i=;i<n*;i++){
dp1[i][i+]=dp2[i][i+]=a[i]+a[i+];
} for(int len=;len<=n;len++){
for(int i=;i+len-<=n*;i++){
int j=i+len-;
//dp1[i][j]=min(dp1[i+1][j],dp1[i][j-1])+s(i,j);
//dp2[i][j]=max(dp2[i+1][j],dp2[i][j-1])+s(i,j);
for(int u=i;u<j;u++){
dp1[i][j]=min(dp1[i][j], dp1[i][u]+dp1[u+][j]+s(i,j));
dp2[i][j]=max(dp2[i][j], dp2[i][u]+dp2[u+][j]+s(i,j));
}
//cout<<i<<","<<j<<":"<<dp1[i][j]<<" "<<dp2[i][j]<<endl;
}
//cout<<endl;
} int ans1=0x3f3f3f3f,ans2=-0x3f3f3f3f;
for(int i=;i<=n+;i++){
ans1=min(ans1,dp1[i][i+n-]);
ans2=max(ans2,dp2[i][i+n-]);
} cout<<ans1<<endl;
cout<<ans2<<endl; return ;
}
code2102 石子归并2的更多相关文章
- AC日记——石子归并 codevs 1048
1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 有n堆石子排成一列,每堆石子 ...
- 51nod 1021 石子归并(dp)
51nod 1021 石子归并 题解:从i到j合并的最小值:dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1]); 最 ...
- 51nod1022 石子归并 V2
证明w满足四边形不等式,这里w是m的附属量,形如m[i,j]=opt{m[i,k]+m[k,j]+w[i,j]},此时大多要先证明w满足条件才能进一步证明m满足条件证明m满足四边形不等式证明s[i,j ...
- Codevs 1048 石子归并
1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合 ...
- Codevs_2102_石子归并2_(环状动态规划)
描述 http://codevs.cn/problem/2102/ 2102 石子归并 2 时间限制: 10 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目 ...
- Codevs_1048_石子归并_(动态规划)
描述 http://codevs.cn/problem/1048/ 1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Des ...
- 51 nod 1023 石子归并 V3(GarsiaWachs算法)
1023 石子归并 V3基准时间限制:2 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一 ...
- codevs3002 石子归并 3
题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使 ...
- codevs1048石子归并
codevs1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 http://codevs.cn/problem/1048/ 题目描述 ...
随机推荐
- C++关于变量初始化的琐记
#include <iostream> using namespace std; class Base{ virtual void func1() { cout<<" ...
- Nginx优化指南
大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了!而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能 ...
- WebStorm ES6 语法支持设置
ECMAScript 6是JavaScript语言的下一代标准,已经在2015年6月正式发布了.Mozilla公司将在这个标准的基础上,推出JavaScript 2.0.ES6的目标,是使得JavaS ...
- kubernetes 学习 pod相关
1 pod的状态: Pending, Running, Succeeded, Failed, Unknown 2 pod重启策略: Always(自动重启,是默认的) . OnFailure(容 ...
- GroupVarint
folly/GroupVarint.h folly/GroupVarint.h is an implementation of variable-length encoding for 32- and ...
- 关于i++的解释
根据 JavaScript Language Specification 的定义, 表达式 A=B的执行步骤,简单地说,就是:1. 对等号左边的表达式 A 进行计算,算出最终的结果,必须是参照或变量: ...
- ubuntu 固定静态IP
http://jingyan.baidu.com/article/e5c39bf5bbe0e739d7603396.html 路由器每重启一次,IP都会改变,那么实验室的路由器一天要断电好几次,那么每 ...
- 第二章:Android Studio概述(二)[学习Android Studio汉化教程]
The Main Menu Bar 主菜单栏 主菜单栏位于Android Studio的最上面,你几乎可以利用主菜单和其子菜单来执行任何操作.不像Android Studio中其他的一些菜单,主菜单 ...
- Django-组件--用户认证Auth(auth_user增加字段)
引入: from django.db import models from django.contrib.auth.models import AbstractBaseUser 源码 : from d ...
- Eclipse的Java Working set
1. 在 java perspective 点击 package explorer 的 倒三角 ,选择 Configurate Working Sets 新建Working Sets 或者 在 pac ...