区间dp专题小结
区间DP是一类在区间上进行动态规划的最优问题,一般是根据问题设出一个表示状态的 dp,可以是二维的也可以是三维的,一般情况下为二维。然后将问题划分成两个子问题,也就是一段区间分成左右两个区间,然后将左右两个区间合并到整个区间,或者说局部最优解合并为全局最优解,然后得解。
这类DP可以用常规的for循环来写,也可以用记忆化搜索来写。一般情况下记忆化搜索的代码比较好写,所以一般都用 dfs 来代替获得dp值。然而说到底,这只是一种思想,具体的代码根据题目的不同差别很大,而且有很多需要考虑的细节。
POJ-1651-Multiplication-Puzzle:
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
int a[104], dp[104][104];
int dfs(int x, int y) {
if (dp[x][y] != -1)
return dp[x][y];
if (x + 1 >= y)
return dp[x][y] = 0;
dp[x][y] = 0x7fffff;
for (int i = x + 1; i < y; i++) {
dp[x][y] = min(dp[x][y], dfs(x, i) + dfs(i, y) + a[x] * a[i] * a[y]);
}
return dp[x][y];
}
int main() {
int n;
while (scanf("%d", &n) == 1) {
memset(a, 0, sizeof a);
memset(dp, -1, sizeof dp);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
printf("%dn", dfs(1, n));
}
}
POJ-2955-Brackets:
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
char s[104];
int dp[104][104];
bool match(char a, char b) {
return a == '(' && b == ')' || a == '[' && b == ']';
}
int dfs(int x, int y) {
if (dp[x][y] != -1)
return dp[x][y];
if (x + 1 >= y)
return dp[x][y] = 0;
dp[x][y] = 0;
for (int i = x; i < y; i++) {
for (int j = i + 1; j < y; j++) {
if (match(s[i], s[j])) {
dp[x][y] = max(dp[x][y], dfs(i + 1, j) + 1 + dfs(j + 1, y));
}
}
}
return dp[x][y];
}
int main() {
while (true) {
memset(dp, -1, sizeof dp);
gets(s);
if (strcmp(s, "end") == 0)
break;
printf("%dn", 2 * dfs(0, strlen(s)));
}
}
区间dp专题小结的更多相关文章
- 区间dp专题练习
区间dp专题练习 题意 1.Equal Sum Partitions ? 这嘛东西,\(n^2\)自己写去 \[\ \] \[\ \] 2.You Are the One 感觉自己智力被吊打 \(dp ...
- 区间dp专题
HDU4283You Are the One区间dp, 记忆话搜索运行时间: #include <iostream> #include <cstdio> #include ...
- 专题训练之区间DP
例题:以下例题部分的内容来自https://blog.csdn.net/my_sunshine26/article/details/77141398 一.石子合并问题 1.(NYOJ737)http: ...
- kuangbin专题十二 POJ3186 Treats for the Cows (区间dp)
Treats for the Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7949 Accepted: 42 ...
- 「kuangbin带你飞」专题二十二 区间DP
layout: post title: 「kuangbin带你飞」专题二十二 区间DP author: "luowentaoaa" catalog: true tags: - ku ...
- [kuangbin带你飞]专题二十二 区间DP
ID Origin Title 17 / 60 Problem A ZOJ 3537 Cake 54 / 105 Problem B LightOJ 1422 Hallowee ...
- 区间DP小结
也写了好几天的区间DP了,这里稍微总结一下(感觉还是不怎么会啊!). 但是多多少少也有了点感悟: 一.在有了一点思路之后,一定要先确定好dp数组的含义,不要模糊不清地就去写状态转移方程. 二.还么想好 ...
- UESTC 2015dp专题 A 男神的礼物 区间dp
男神的礼物 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/65 Descri ...
- 【专题】区间dp
1.[nyoj737]石子合并 传送门:点击打开链接 描述 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这 ...
- 区间DP小结 及例题分析:P1880 [NOI1995]石子合并,P1063 能量项链
区间类动态规划 一.基本概念 区间类动态规划是线性动态规划的拓展,它在分阶段划分问题时,与阶段中元素出现的顺序和由前一阶段的那些元素合并而来由很大的关系.例如状态f [ i ][ j ],它表示以已合 ...
随机推荐
- JavaWeb项目中web.xml配置文件<servlet-class>…</servlet-class>中的路径出现问题以及服务器错误的解决办法
问题如图 原因: 1.改变了 WEB-INF 文件夹下 lib 文件夹下 servlet-api.jar 的路径2.缺失lib文件夹下的 servlet-api.jar,没有添加到库中 解决办法: 不 ...
- Go笔记(4)-流程控制
5.Go语言流程控制 程序流程的控制结构一般有三种,顺序结构,选择结构,循环结构 (1)选择结构 if语句 if流程控制与其他语言的if流程控制基本相同 package main import &qu ...
- 基于winform(C#)的飞鸟小游戏
本项目是一款基于C# (winform)版本的飞鸟小游戏,是一款益智类游戏 其效果如下图所示 如上图所示为飞鸟游戏的初始化界面: 可以看到游戏包含了四个功能: 启动 注册 登陆 排行榜 启动:是用于开 ...
- Mybatis大于、小于....转义写法
描述 转义前 转义后 大于 > > 大于等于 >= >= 小于 < < 小于等于 <= <= 和 & & 单引号 ' &apos ...
- Git提交修正
应用场景 日常开发中我们可能会遇到这样的问题 1.提交了代码有错误 2.提交的信息写错了 3.漏了一些文件没有提交 ...... 再或者我们写一个功能时,中间有很多小的提交,这中间就会产生特别多的co ...
- Feign远程调用丢失请求头问题
问题 项目中我使用feign进行远程调用时,在请求头设置了参数(UserId),结果在调用方却收获取不到... 解决办法 feign提供了一个拦截器,在远程调用之前执行 核心代码 package co ...
- MySQL运维10-Mycat分库分表之一致性哈希分片
一.一致性哈希分片 一致性哈希分片的实现思路和我们之前介绍的水平分表中的取模分片是类似的.只不过取模分片,采用的是利用主键和分片数进行取模运算,然后根据取模后的结果,将数据写入到不同的分片数据中.但是 ...
- jenkins安装部署、主从架构、slave镜像、K8S对接
介绍 CI/CD工具,自动化持续集成和持续部署,用于构建各种自动化任务. 官方提供了docker镜像https://hub.docker.com/r/jenkins/jenkins 使用Deploym ...
- libgdx摄像头的移动
要知道,做一个游戏,摄像头是必不可少的.接下来,我将讲解libgdx里面摄像头的移动 2d摄像头OrthographicCamera也叫做正交相机 结果展示: 按上下左右是可以移动的 Orthogra ...
- MinIO客户端之du
MinIO提供了一个命令行程序mc用于协助用户完成日常的维护.管理类工作. 官方资料 mc du 用于输出桶内对象的数量和占用的空间. 命令如下: ./mc du local1/bkt1 控制台的输出 ...