HDU 4960 Another OCD Patient 简单DP
思路:
因为是对称的,所以如果两段是对称的,那么一段的前缀和一定等于另一段的后缀和。根据这个性质,我们可以预处理出这个数列的对称点对。然后最后一个对称段是从哪里开始的,做n^2的DP就可以了。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <functional>
#include <cctype>
#include <time.h> using namespace std; typedef __int64 ll; const int INF = <<;
const int MAXN = (int) ; inline void nextInt(int &x) {
char c = getchar();
x = ;
while (isdigit(c)) {
x = x* + c-'';
c = getchar();
}
} inline void nextLL(ll &x) {
char c = getchar();
x = ;
while (isdigit(c)) {
x = x* + c-'';
c = getchar();
}
} ll a[MAXN], V[MAXN], prefix[MAXN], suffix[MAXN];
ll dp[MAXN];
int sym[MAXN];
int n; void solve() {
a[] = ;
prefix[] = suffix[n+] = ;
for (int i = ; i <= n; i++) prefix[i] = suffix[i] = V[i];
for (int i = ; i < n; i++) prefix[i+] += prefix[i]; //前缀和
for (int i = n; i > ; i--) suffix[i] += suffix[i+]; //后缀和 for (int i = , j = n; i <= n; i++) { //求对称点
sym[i] = -;
while (j> && prefix[i]>suffix[j]) j--;
if (prefix[i]==suffix[j]) sym[i] = j;
} memset(dp, -, sizeof(dp));
for (int i = ; i <= n; i++) if (sym[i]>) { //这一点有对称点
if (sym[i] <= i) break; //枚举过界
dp[i] = a[i] + a[n-sym[i]+]; //前面是一整段
for (int j = ; j < i; j++) if (sym[j]>) { //从j转移过来
dp[i] = min(dp[i], dp[j]+a[i-j]+a[sym[j]-sym[i]]);
}
} ll ans = a[n];
for (int i = ; i <= n; i++) if (dp[i]>=)
ans = min(ans, dp[i]+a[sym[i]-i-]); //中间合成一段
printf("%I64d\n", ans);
} int main() {
#ifdef Phantom01
freopen("HDU4960.txt", "r", stdin);
#endif //Phantom01 while () {
nextInt(n);
if (n==) break;
for (int i = ; i <= n; i++)
nextLL(V[i]);
for (int i = ; i <= n; i++)
nextLL(a[i]);
solve();
} return ;
}
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(dp)
Another OCD Patient Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Ot ...
- hdu 4960 Another OCD Patient (最短路 解法
http://acm.hdu.edu.cn/showproblem.php?pid=4960 2014 Multi-University Training Contest 9 Another OCD ...
- HDU 5375 Gray code (简单dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5375 题面: Gray code Time Limit: 2000/1000 MS (Java/Oth ...
- hdu 2084 数塔(简单dp)
题目 简单dp //简单的dp #include<stdio.h> #include<string.h> #include<algorithm> using nam ...
- hdu 2041 超级楼梯(简单dp)
超级楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- [hdu4960]Another OCD Patient(区间dp)
题意:给出n个数,把这n个数合成一个对称的集合.每个数只能合并一次. 解题关键:区间dp,dp[l][r]表示l-r区间内满足条件的最大值.vi是大于0的,所以可以直接双指针确定. 转移方程:$dp[ ...
- HDU 4939 Stupid Tower Defense 简单DP
题意: 地图为长为n个单位长度的直线,每通过一个单位长度需要t秒. 有3种塔,红塔可以在当前格子每秒造成x点伤害,绿塔可以在之后格子造成y点伤害,蓝塔可以使通过单位长度的时间增加z秒. 让你安排塔的排 ...
- HDU 6024 Building Shops (简单dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6024 题意:有n个room在一条直线上,需要这这些room里面建造商店,如果第i个room建造,则要总 ...
随机推荐
- Servlet学习(三)——实例:用户登录并记录登陆次数
1.前提:在Mysql数据库下建立数据库web13,在web13下创建一张表user,插入几条数据如下: 2.创建HTML文件,命名为login,作为登录界面(以post方式提交) <!DOCT ...
- swift语言点评十六-Initialization && Deinitialization
initial value:必须初始化.不影响观察者 Classes and structures must set all of their stored properties to an appr ...
- sass的用法小结(三)
5. 混合器; 如果你的整个网站中有几处小小的样式类似(例如一致的颜色和字体),那么使用变量来统一处理这种情况是非常不错的选择.但是当你的样式变得越来越复杂,你需要大段大段的重用样式的代码,独立的变量 ...
- js悬浮吸顶
<!DOCTYPE html> <head> <meta charset="UTF-8"> <title>吸顶和锚点链接</t ...
- python 之 MRO 异常
今天突然遇到这个异常,先贴两个地址,待有时间写博客 https://www.jianshu.com/p/fea6e0a0cc14 https://makina-corpus.com/blog/meti ...
- java实现websocket 终极指南
大概思路: 首先用户登陆 获取用户信息存储到httpsession中,然后客户端链接服务端websocket,首先HandshakeInterceptor这个拦截器会拦截请求 调用 beforeH ...
- puppet介绍与安装
puppet是什么puppet是一种基于ruby语言开发的Lnux.Unix.windows平台的集中配置管理系统.它使用自有的puppet描述语言,可管理配置文件file.用户user.cron任务 ...
- visual studio 2015下python编程的中文字符串问题
visual studio 2015强大的编程功能,编写起python来也是非常方便的,但其对中文字符的支持不是很好,经常发生莫名其妙的错误,最常见的错误是不报错,也不执行代码. 代码简单如下: x= ...
- Eclipse中JSON文件报错,如何解决?
eclipse里面的JSON文件老报错,虽然可以正常运行,但红X看起来就是不爽,怎么解决呢? 这是因为Eclipse认为JSON文件不需要注释,所以报的编译错误,我们可以通过Eclipse的设置把它的 ...
- jeesite 简介
jeesite 简介 https://github.com/thinkgem/jeesite http://jeesite.com/