区间DP 入门
首先我们先需要知道区间是如何用dp来做的,让我们来看一下模板。
for (int i = ; i <= n; i++){//枚举区间里面的个数
for (int j = ; j <= 能枚举到得最大的pos; j++){
int p = i + j - ;//表示在目前能到达的最大值的坐标
if (p > n) break;
for (int k = j; k <= p; k++){
dp[j][p] = min or max(dp[j][p], dp[j][k] + dp[k + ][p] + j to p 的 val);
}
}
}
①石子问题
http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=737
这个就是很显然的模板题目了。
可以提前用sum[]来维护区间的和,或者也可以用树状数组维护。
#include<cstdio>
#include<algorithm>
#include<cstring> using namespace std;
const int maxn = + ;
const int inf = 0x3f3f3f3f;
int dp[maxn][maxn];
int a[maxn];
int sum[maxn];
int n; int main(){
while (scanf("%d", &n) == ){
for (int i = ; i <= n; i++) scanf("%d", a + i);
memset(dp, , sizeof(dp));
memset(sum, , sizeof(sum));
for (int i = ; i <= n; i++){
sum[i] = sum[i - ] + a[i];
}
for (int i = ; i <= n; i++){
for (int j = ; j <= n - i + ; j++){
int p = j + i - ;
if (p > n) break;
dp[j][p] = inf;
for (int k = j; k <= p; k++){
dp[j][p] = min(dp[j][p], dp[j][k] + dp[k + ][p] + sum[p] - sum[j - ]);
}
}
}
printf("%d\n", dp[][n]);
}
return ;
}
②
区间DP 入门的更多相关文章
- POJ 2955 Brackets (区间dp入门)
Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...
- hdu 4570 Multi-bit Trie 区间DP入门
Multi-bit Trie 题意:将长度为n(n <= 64)的序列分成若干段,每段的数字个数不超过20,且每段的内存定义为段首的值乘以2^(段的长度):问这段序列总的内存最小为多少? 思路: ...
- POJ2955--Brackets 区间DP入门 括号匹配
题意很简单,就是求给出串中最大的括号匹配数目.基础题,格式基本为简单区间dp模板. #include<iostream> #include<string.h> using na ...
- HRBUST - 1818 石子合并 区间dp入门
有点理解了进阶指南上说的”阶段,状态和决策“ /* 区间dp的基础题: 以区间长度[2,n]为阶段,枚举该长度的区间,状态dp[l][r]表示合并区间[l,r]的最小费用 状态转移方程dp[l][r] ...
- 区间DP入门题目合集
区间DP主要思想是先在小区间取得最优解,然后小区间合并时更新大区间的最优解. 基本代码: //mst(dp,0) 初始化DP数组 ;i<=n;i++) { dp[i][i]=初始 ...
- [nyoj737]石子归并(区间dp入门题)
题意:有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆.求出总的代价最小值 ...
- 区间DP入门
所为区间DP,主要是把一个大区间拆分成几个小区间,先求小区间的最优值,然后合并起来求大区间的最优值. 区间DP最关键的就是满足最优子结构以及无后效性!! 例如像是石子合并和括号匹配这两类比较经典的模型 ...
- poj 2955 区间dp入门题
第一道自己做出来的区间dp题,兴奋ing,虽然说这题并不难. 从后向前考虑: 状态转移方程:dp[i][j]=dp[i+1][j](i<=j<len); dp[i][j]=Max(dp[i ...
- LightOJ 1422:Halloween Costumes(区间DP入门)
http://lightoj.com/volume_showproblem.php?problem=1422 题意:去参加派对,有n场派对,每场派对要穿第wi种衣服,可以选择外面套一件,也可以选择脱掉 ...
- NYOJ 石子合并(一) 区间dp入门级别
描述 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆.求出总的代价 ...
随机推荐
- 初试LIBSVM
在做Kinect手势识别项目的时候用到了SVM这个东西.原理上不甚了解,但是用起来感觉还是很神奇的. 度娘百科:支持向量机SVM(Support Vector Machine)作为一种可训练的机器学习 ...
- html5--基础笔记
1.对于<a>标签 以前: <h2><a href="index.html">The home page</a></h2> ...
- Flask -- 请求、上传文件、Cookies
请求对象 from flask import request request.method #值为form表单提交的method 'POST'. 'GET'等 #如果值为'POST'或'PUT',则可 ...
- TCP/IP体系结构-测试人员必须理解的
如果还想在测试这条路上继续走下去的话,那么下面这些东西就是我们必须去掌握的,至少你还不想止步于简单的黑盒测试--其实,一直想去接触Linux下的应用测试,这样能学到东西会很多,而且会非常的受用.之前听 ...
- 搭建Mantis 缺陷管理系统
什么是Mantis MantisBT is a free popular web-based bugtracking system (feature list). It is written in t ...
- UpdateData使用说明
UpdateData() MFC的窗口函数,下面是MSDN的说明: Call this member function to initialize data in a dialog box, or t ...
- hdu_4718_The LCIS on the Tree(树链剖分+线段树合并)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4718 题意:给你一棵树,每个节点有一个值,然后任给树上的两点,问这两点的最长连续递增区间是多少 题解: ...
- find the greatest common divisor
function gcd(a, b) return a else return gcd(b, a mod b)
- 读苹果开发文档时遇到瓶颈,转而花2天看了Objc基本语法
根据这篇博客中列出的文章开始看Objc基本语法: http://blog.hellolucky.info/articles/ios-beginner-ios-development/ 看完以后,明白多 ...
- 图解HTTP读书笔记--精简版
这本书重点讲了两点,分别是 HTTP的报文格式 HTTPS比HTTP优秀在哪里 接下来分部分讨论一下: 1. HTTP的报文格式 请求报文格式: 请求行 指明请求方法 请求路径 和协议 如 ...