HDU 3506 Monkey Party(区间DP)题解
题意:有n个石堆排成环,每次能合并相邻的两堆石头变成新石堆,代价为新石堆石子数,问最少的总代价是多少
思路:先看没排成环之前怎么做:用dp[i][j]表示合并i到j所需的最小代价,那么dp[i][j]就是合并i~k、k+1~j的最小代价,即dp[i][j] = min(dp[i][j],dp[i][k] + dp[k + 1][j] + w[i][j]])。
for(int len = ; len <= n; len++){ //区间长度
for(int i = ; i + len - <= n; i++){ //起始位置
int j = i + len - ; //末尾位置
for(int k = i; k <= j; k++){
if(dp[i][j] > dp[i][k] + dp[k + ][j] + w[i][j]){
dp[i][j] = dp[i][k] + dp[k + ][j] + w[i][j]];
}
}
}
}
合并石堆环是,只要把n首尾相接扩展到2n,就可以了。
这个dp还可以用四边形不等式优化
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
typedef long long ll;
using namespace std;
const int maxn = + ;
const int MOD = 1e9 + ;
const int INF = 0x3f3f3f3f;
int a[maxn], dp[maxn << ][maxn << ], sum[maxn];
int s[maxn << ][maxn << ]; //i到j的最佳分割点
int main(){
int n;
while(~scanf("%d", &n)){
sum[] = ;
memset(dp, INF, sizeof(dp));
for(int i = ; i <= n; i++){
scanf("%d", &a[i]);
a[i + n] = a[i];
}
for(int i = ; i <= * n; i++){
s[i][i] = i;
dp[i][i] = ;
sum[i] = sum[i - ] + a[i];
}
for(int len = ; len <= n; len++){ //长度
for(int i = ; i + len - <= * n; i++){ //起始位置
int j = i + len - ;
for(int k = s[i][j - ]; k <= s[i + ][j]; k++){
if(dp[i][j] > dp[i][k] + dp[k + ][j] + sum[j] - sum[i - ]){
dp[i][j] = dp[i][k] + dp[k + ][j] + sum[j] - sum[i - ];
s[i][j] = k;
}
}
}
}
int ans = INF;
for(int i = ; i <= n; i++){
ans = min(ans, dp[i][i + n - ]);
}
printf("%d\n", ans);
}
return ;
}
HDU 3506 Monkey Party(区间DP)题解的更多相关文章
- hdu 3506 Monkey Party 区间dp + 四边形不等式优化
http://acm.hdu.edu.cn/showproblem.php?pid=3506 四边行不等式:http://baike.baidu.com/link?url=lHOFq_58V-Qpz_ ...
- HDU 1069 Monkey and Banana dp 题解
HDU 1069 Monkey and Banana 纵有疾风起 题目大意 一堆科学家研究猩猩的智商,给他M种长方体,每种N个.然后,将一个香蕉挂在屋顶,让猩猩通过 叠长方体来够到香蕉. 现在给你M种 ...
- HDU 5115 Dire Wolf 区间dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...
- HDU 5693 D Game 区间dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5693 题解: 一种朴实的想法是枚举选择可以删除的两个或三个数(其他的大于三的数都能凑成2和3的和), ...
- hdu 4597 Play Game 区间dp
Play Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=459 ...
- hdu 5181 numbers——思路+区间DP
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5181 题解:https://www.cnblogs.com/Miracevin/p/10960717.ht ...
- hdu 5693 && LightOj 1422 区间DP
hdu 5693 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5693 等差数列当划分细了后只用比较2个或者3个数就可以了,因为大于3的数都可以由2和3 ...
- hdu 4745 Two Rabbits 区间DP
http://acm.hdu.edu.cn/showproblem.php?pid=4745 题意: 有两只兔子Tom Jerry, 他们在一个用石头围城的环形的路上跳, Tom只能顺时针跳,Jerr ...
- HDU - 3506 Monkey Party
HDU - 3506 思路: 平行四边形不等式优化dp 这不就是石子归并(雾 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma G ...
- E - Max Sum Plus Plus Plus HDU - 1244 (线性区间DP)
题目大意: 值得注意的一点是题目要求的是这些子段之间的最大整数和.注意和Max Sum Plus Plus这个题目的区别. 题解: 线性区间DP,对每一段考虑取或者不取.定义状态dp[i][j]指的 ...
随机推荐
- 初识gispro
因为之前一直用的arcmap,由于项目中用到三维数据的服务发布,需要用到gispro.Gispro与arcmap用法还是有些不同.仅用此文来记录一些简易操作. Gispro简介 ArcGIS Pro是 ...
- Java类访问控制
public protected default private 本类 可见 可见 可见 可见 本类所在包 可见 可见 可见 不可见 其他包中的子类 可见 可见 不可见 不可见 其他包中的非子类 ...
- 永恒之蓝msf下 ms17_010 (64位kali下安装wine32)
本次用到的环境: kali(2016.2)32位系统.ip地址:192.168.1.104 目标靶机为:win7sp1x64系统(关闭防火墙),ip地址:192.168.1.105 ========= ...
- 20170918-00-(代理ip检验)
代码集编号 20170918-00 import random #随机数模块 import urllib.request #常用爬虫模块 import time from bs4 import Bea ...
- 7.线程id,优先级讲解
1.线程id可以通过Thread对象的getId()方法得到,在线程出了问题,为什么CPU占用这么高的时候,查的时候我们可以在堆栈信息中找到对应线程,然后干掉该线程就好! 2.而线程对象的getNam ...
- php实现多进程
转:http://www.jb51.net/article/71238.htm cd php-version/ext/pcntl phpize ./configure && make ...
- 把本地windows系统上的mysql数据库移到linux系统服务器上,mysql数据库拒绝访问
Mysql连接报错 原因是:远程服务器不允许你的其他程序访问它的数据库.所以,我们要对远程服务器进行设置,使它允许你进行连接. 步骤:一.进入mysql客户端,输入:use mysql; 二.输入:s ...
- ActiveMQ任意文件写入漏洞(版本在5.12.X前CVE-2016-3088)
ActiveMQ任意文件写入漏洞(版本在5.12.X前CVE-2016-3088) 查看docker的activemq版本命令:$ docker ps | grep activemq927860512 ...
- RESTful API 设计指南,RESTful API 设计最佳实践
RESTful API 设计指南,RESTful API 设计最佳实践 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). ...
- html div重叠问题,原因分析和处理
1.现象 <!DOCTYPE html > <html> <head> <meta http-equiv="Content-Type" c ...