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/ 题目描述 ...
随机推荐
- cpp分解质因数
原理有点像埃氏筛. #include <stdio.h> #include <iostream> #include <stdlib.h> using namespa ...
- 浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
做过 API 的人应该了解,其实开发 API 比开发 WEB 更简洁,但可能逻辑更复杂,因为 API 其实就是数据输出,不用呈现页面,所以也就不存在 MVC(API 只有 M 和 C),那么我们来探讨 ...
- gil基本介绍
一 引子 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native t ...
- 渗透辅助神器 - DZGEN
项目地址:https://github.com/joker25000/DZGEN git clone ┌─[root@sch01ar]─[/sch01ar] └──╼ #git clone https ...
- 温故而知新-WebSocket 教程
一.为什么需要 WebSocket? 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP 协议有 ...
- 关于Android的margin(当前视图与周围视图的距离)和padding(当前视图与内部内容的距离)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- Halcon学习之八:图像区域叠加与绘制
版权声明:本文为博主原创文章,未经博主允许不得转载. overpaint_gray ( ImageDestination, ImageSource : : : ) 将灰度值不相同区域用不同颜色绘制到 ...
- SpringMVC配置过程中出现的问题!
<c:set var="ctx" value="${pageContext.request.contextPath}" />不起作用,原因是web. ...
- Daemon进程
这又是一个有趣的概念,daemon在英语中是"精灵"的意思,就像我们经常在迪斯尼动画里见到的那些,有些会飞,有些不会,经常围着动画片的主人公转来转去,啰里啰唆地提一些忠告,时不时倒 ...
- SVN 与Git的区别
1:最主要的区别是Git是分布式版本控制系统,而SVN是集中式的版本控制系统.能理解这一点,区别它们就会容易很多,Git并不是目前唯一的分布式版本控制系统,比如还有Mercurial等.不过话说回来G ...