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/ 题目描述 ...
随机推荐
- Tomcat原理的一点看法
版权声明:本文为博主原创文章,未经博主允许不得转载. 首先,运行tomcat之前,先写一个html页面, 再写一个serlvet程序 配置文件如下: 那么程序是怎样运行的呢? 浏览器发起请求到 --& ...
- boost 编译 安装
首先到 boost.org 下载 boost_1_54_0.tar.gz 上传到 linux 环境下 解压缩 给解压缩出来的文件斌权限 chmod 777 ./* 执行己写好的 shell脚本 boo ...
- Hibernate学习8—Hibernate 映射关系(一对一)
第一节:Hibernate 一对一映射关系实现 假设一个用户对应一个地址: 1)按照主键映射: User.java: package com.cy.model; public class User ...
- 【原】C++11并行计算 — 数组求和
本文转载请注明出处 -- polobymulberry-博客园 0x00 - 前言 最近想优化ORB-SLAM2,准备使用并行计算来提高其中ORB特征提取的速度.之前对并行计算方面一窍不通.借此机会, ...
- Oracle段高水位(HWM, high water mark)问题
Oracle对表做全表扫描的时候 ,会扫描完HWM以下的数据块.如果某个表delete(delete操作不会降低高水位)了大量数据,那么这时对表做全表扫描就会做很多无用功,扫描了一大堆数据块,最后发现 ...
- socket通信循环
server-----------------#!/usr/bin/env python # encoding: utf-8 # Date: 2018/6/5 import socket phone ...
- Sqlmap用法小结
一共有七个等级0.只显示python错误以及严重的信息.1.同时显示基本信息和警告信息.(默认)2.同时显示debug信息.3.同时显示注入的payload.4.同时显示HTTP请求.5.同时显示HT ...
- svn删除
[本地删除.然后提交到服务器]与[服务器删除然后本地更新] svn delete svn://路径(目录或文件的全路径) -m “删除备注信息文本” 推荐如下操作: svn delete 文件名 sv ...
- C# 生成序号不足补0
int Num=13 var code =Num.ToString().PadLeft(4, '0'); code:0013
- halcon采集一幅图像
**顺序也很重要,必须现有窗口,才能设置属性 dev_close_window()dev_open_window (0, 0, 1400, 1200, 'black', WindowHandle)de ...