hdu 4960 Another OCD Patient(dp)
Another OCD Patient
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 645 Accepted Submission(s): 238
Problem Description
Xiaoji is an OCD (obsessive-compulsive disorder) patient. This morning, his children played with plasticene. They broke the plasticene into N pieces, and put them in a line. Each piece has a volume Vi. Since Xiaoji is an OCD patient, he can't stand with the disorder of the volume of the N pieces of plasticene. Now he wants to merge some successive pieces so that the volume in line is symmetrical! For example, (10, 20, 20, 10), (4,1,4) and (2) are symmetrical but (3,1,2), (3, 1, 1) and (1, 2, 1, 2) are not.
However, because Xiaoji's OCD is more and more serious, now he has a strange opinion that merging i successive pieces into one will cost ai. And he wants to achieve his goal with minimum cost. Can you help him?
By the way, if one piece is merged by Xiaoji, he would not use it to merge again. Don't ask why. You should know Xiaoji has an OCD.
Input
The input contains multiple test cases.
The first line of each case is an integer N (0 < N <= 5000), indicating the number of pieces in a line. The second line contains N integers Vi, volume of each piece (0 < Vi <=10^9). The third line contains N integers ai (0 < ai <=10000), and a1 is always 0.
The input is terminated by N = 0.
Output
Output one line containing the minimum cost of all operations Xiaoji needs.
Sample Input
5
6 2 8 7 1
0 5 2 10 20
0
Sample Output
10 Hint In the sample, there is two ways to achieve Xiaoji's goal.
[6 2 8 7 1] -> [8 8 7 1] -> [8 8 8] will cost 5 + 5 = 10.
[6 2 8 7 1] -> [24] will cost 20.
Author
SYSU
Source
2014 Multi-University Training Contest 9
今天比赛的时候想到记忆化搜索,时间复杂度n^2logn,不过想想实际,也就n^2的复杂度,因为这个复杂度,怕被卡时间,所以
也没什么信心打,结果跟队友码别的题,码到最后才发现思路错了,囧
view code//按比赛是想法做的,有点可惜,时间800ms
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long ll;
const int INF = 1<<30;
const int N = 5005;
int n, dp[N][N];
ll sum[N], v[N],a[N];
bool vis[N][N]; int find(int l, int r, ll x)
{
int n = r;
while(l<=r)
{
int m = (l+r)>>1;
if(sum[n]-sum[m-1]==x) return m;
if(sum[n]-sum[m-1]>x) l = m+1;
else r = m-1;
}
return 0;
} int dfs(int l, int r)
{
if(l>=r) return 0;
if(vis[l][r]) return dp[l][r];
vis[l][r] = 1;
int &ans = dp[l][r];
ans = v[r-l+1];
for(int i=l; i<r; i++)
{
int R = find(i+1, r, sum[i]-sum[l-1]);
if(!R) continue;
ans = min((ll)ans, (ll)(dfs(i+1, R-1)+v[i-l+1]+v[r-R+1]));
}
return ans;
} void solve()
{
for(int i=1; i<=n; i++){
scanf("%I64d", a+i);
sum[i] = sum[i-1] + a[i];
}
for(int i=1; i<=n; i++) scanf("%I64d", v+i);
memset(vis, 0, sizeof(vis));
printf("%d\n", dfs(1,n));
} int main()
{
// freopen("in.txt", "r", stdin);
while(scanf("%d", &n)>0 && n) solve();
return 0;
}
根据比赛是想法的优化,思想差不多,只不过优化了时间空间
view code#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 5010;
int L[N], R[N], cnt;
ll dp[N], sum[N], a[N], v[N], n;
bool vis[N]; int find(int l, int r, ll x)
{
int n = r;
while(l<=r)
{
int m = (l+r)>>1;
if(sum[n]-sum[m-1]==x) return m;
if(sum[n]-sum[m-1]>x) l=m+1;
else r = m-1;
}
return 0;
} void init()
{
cnt = 0;
for(int l=1; l<=n; l++)
{
int r = find(l+1, n, sum[l]);
if(!r) continue;
L[cnt] = l;
R[cnt++] = r;
}
} ll dfs(int pos, int l, int r)
{
if(l>=r) return 0;
if(dp[l]!=-1) return dp[l];
ll& ans=dp[l];
ans = v[r-l+1];
for(int i=pos; i<cnt; i++)
{
ans = min(dfs(i+1, L[i]+1,R[i]-1)+v[L[i]-l+1]+v[r-R[i]+1], ans);
}
return ans;
} void solve()
{
for(int i=1; i<=n; i++){
scanf("%I64d", &a[i]);
sum[i] = sum[i-1]+a[i];
}
for(int i=1; i<=n; i++) scanf("%I64d", v+i);
init();
memset(dp, -1, sizeof(dp));
printf("%I64d\n",dfs(0, 1, n));
} int main()
{
// freopen("in.txt", "r", stdin);
while(scanf("%I64d", &n)>0 && n) solve();
return 0;
}
hdu 4960 Another OCD Patient(dp)的更多相关文章
- HDU 4960 Another OCD Patient(记忆化搜索)
HDU 4960 Another OCD Patient pid=4960" target="_blank" style="">题目链接 记忆化 ...
- hdu 4960 Another OCD Patient (最短路 解法
http://acm.hdu.edu.cn/showproblem.php?pid=4960 2014 Multi-University Training Contest 9 Another OCD ...
- HDU 4960 Another OCD Patient 简单DP
思路: 因为是对称的,所以如果两段是对称的,那么一段的前缀和一定等于另一段的后缀和.根据这个性质,我们可以预处理出这个数列的对称点对.然后最后一个对称段是从哪里开始的,做n^2的DP就可以了. 代码: ...
- hdu 4960 记忆化搜索 DP
Another OCD Patient Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Ot ...
- HDU_4960 2014多校9 Another OCD Patient DP
其实现在想起来是个巨简单的DP,模型就跟LCS很像,比赛的时候居然没想出来,在聪哥提醒下还卡了个地方 就是说给定一串n个数字的序列,可以连续合并,最终使得序列是回文的,题目也给定了合并数字所需的代价, ...
- HDU4960Another OCD Patient(间隙dp,后座DP)
Another OCD Patient Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Ot ...
- HDU 4960 (水dp)
Another OCD Patient Problem Description Xiaoji is an OCD (obsessive-compulsive disorder) patient. Th ...
- HDU 1003 Max Sum --- 经典DP
HDU 1003 相关链接 HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...
- hdu 5094 Maze 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...
随机推荐
- Git基本使用教程
1.创建版本库 版本库又可以称为仓库(repository),可以简单理解为一个目录,在这个目录下的所有文件都可以被git管理起来,每个文件的新增.修改.删除Git都可以跟踪,以便在任何时刻 ...
- Nuget很慢,我们该怎么办
在VS中给项目添加程序已经采用NuGet 十分方便 不过很多时候速度很慢,一直显示“正在检索信息” 其实直接使用程序包管理控制台,速度就会好很多 如果命令不太会写,安装包名不是确认,可以先登录 htt ...
- css 属性选择器
css2的属性选择器 1.[class~="flower"]:选中有flower的class class="flower ss" class="ss ...
- jQuery cxScroll 间歇式无缝滚动
版本: jQuery v1.7+ jQuery cxScroll v1.2.2 注意事项: 内部会自动创建 prev 及 next 切换按钮,也可以在外部直接创建,若外部已创建或设置prevBtn: ...
- Jquery中的日历插件
这个插件很简单:只需要在HTML代码中引入插件如下,CLASS名和click事件函数固定! <!doctype html> <html lang="en"> ...
- NodeJS API简介
简单介绍下NodeJS现有API. Assert(断言):该模块用于编写程序的单元测试用例. Buffer(缓冲块) :处理二进制数据. C/C++ Addons(拓展):Addons插件就是动态连接 ...
- Java Web 三层架构详解
java 三层架构ssh 一个spring2.5+hibernate3.2+struts2.0组合框架,使用spring的 IoC来管理应用的 所有bean,包括struts2的 action,充分发 ...
- ArcGIS version not specified错误解决方法
添加下列语句到程序入口前: ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine);
- Jquery分页功能
Jquery代码 /// <reference path="jquery-1.9.1-vsdoc.js" />//锚点var anchor="#apage&q ...
- 窗口activity
android:theme="@style/FloatActivity" E:\day9\mobilesafe\res\values\style