HDU 4960 Another OCD Patient(记忆化搜索)
HDU 4960 Another OCD Patient
pid=4960" target="_blank" style="">题目链接
记忆化搜索,因为每一个碎片值都是正数,所以每一个前缀和后缀都是递增的,就能够利用twopointer去找到每一个相等的位置,然后下一个区间相当于一个子问题,用记忆化搜索就可以,复杂度接近O(n^2)
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int INF = 0x3f3f3f3f;
const int N = 5005; typedef long long ll; int n, a[N], dp[N][N];
ll v[N], pre[N]; void init() {
for (int i = 1; i <= n; i++) {
scanf("%I64d", &v[i]);
pre[i] = pre[i - 1] + v[i];
}
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
memset(dp, -1, sizeof(dp));
} int solve(int l, int r) {
if (dp[l][r] != -1) return dp[l][r];
dp[l][r] = a[r - l + 1];
if (l >= r) return dp[l][r] = 0;
int now = l;
for (int i = r; i >= l; i--) {
while (pre[now] - pre[l - 1] < pre[r] - pre[i - 1] && now < i)
now++;
if (now == i) break;
if (pre[now] - pre[l - 1] == pre[r] - pre[i - 1])
dp[l][r] = min(dp[l][r], a[now - l + 1] + a[r - i + 1] + solve(now + 1, i - 1));
}
return dp[l][r];
} int main() {
while (~scanf("%d", &n) && n) {
init();
printf("%d\n", solve(1, n));
}
return 0;
}
HDU 4960 Another OCD Patient(记忆化搜索)的更多相关文章
- hdu 4960 Another OCD Patient(dp)
Another OCD Patient Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Ot ...
- HDU 1176 免费馅饼(记忆化搜索)
免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 1428 漫步校园(记忆化搜索,BFS, DFS)
漫步校园 http://acm.hdu.edu.cn/showproblem.php?pid=1428 Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于 ...
- hdu 4111 Alice and Bob 记忆化搜索 博弈论
Alice and Bob Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
- hdu 1142(迪杰斯特拉+记忆化搜索)
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- hdu 1176免费馅饼(记忆化搜索)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1176 题意不解释了 简单的记忆化搜索可以拿来练练手,注意要从pos = 5 开始搜索 #include ...
- HDU 1078 FatMouse and Cheese 记忆化搜索DP
直接爆搜肯定超时,除非你加了某种凡人不能想出来的剪枝...555 因为老鼠的路径上的点满足是递增的,所以满足一定的拓补关系,可以利用动态规划求解 但是复杂的拓补关系无法简单的用循环实现,所以直接采取记 ...
- HDU 2476 String painter(记忆化搜索, DP)
题目大意: 给你两个串,有一个操作! 操作时可以把某个区间(L,R) 之间的所有字符变成同一个字符.现在给你两个串A,B要求最少的步骤把A串变成B串. 题目分析: 区间DP, 假如我们直接想把A变成B ...
- hdu 5389 Zero Escape(记忆化搜索)
Problem Description Zero Escape, is a visual novel adventure video game directed by Kotaro Uchikoshi ...
随机推荐
- Input类型是checkbox时checked属性获取
记录一下checkbox 的 checked 属性的获取办法,以备忘记: 假如你的一个HTML页中有这么一段代码: <input name="chbRem" id=" ...
- Entity Framework 调用返回标量值的存储过程
最近项目用到EF,虽然说EF与Linq To SQL有很多地方相似,但是EF(这里指3.5版,4.0版的还没去留意)确实有些地方做得不够方便. 就拿存储过程来说吧,EF里面想调用存储过程不是直接在数据 ...
- [转载] 详述三种现代JVM语言--Groovy,Scala和Clojure
转载自http://www.tuicool.com/articles/jYzuAv和http://www.importnew.com/1537.html 在我与Martin Fowler曾经合作呈现的 ...
- Python进阶---面向对象第二弹
python类的继承原理 一.类的继承顺序 class A(object): def test(self): print('from A') passclass B(A): # def test(se ...
- SQL Server 初识游标
---恢复内容开始--- 游标:游标是一种能从包含多个数据的结果集每次提取一条的机制 游标的特点是: 检索得到的数据集更加灵活 可有针对性的对数据进行操作 拥有对数据进行删除和更新的能力 为何使用游标 ...
- JAVA面试之集合框架(三)
21.ArrayList和Vector的区别 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态 ...
- GItCandy版本库搬迁步骤
1.编译GitCandy,源码地址http://git.newlifex.com/NewLife/GitCandy 2.发布网站到文件夹 3.git网站停止运行 4.拷贝发布的网站到服务器目录&quo ...
- C语言之二维数组棋盘游戏
#include<iostream> #include<stdio.h> using namespace std; int main() { //-1 没人赢 0:O赢 1:X ...
- 模板文件引入css样式文件
引用路径问题:相对路径和绝对路径 相对路径:相对路口文件index.php设置 绝对路径:从虚拟主机站点目录开始设置 css样式文件引入图片,路径的设置 相对地址:相对css文件本身设置 ①模板文件 ...
- Mariadb Galera Cluster 群集 安装部署
#Mariadb Galera Cluster 群集 安装部署 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html # ...