思路:

  因为是对称的,所以如果两段是对称的,那么一段的前缀和一定等于另一段的后缀和。根据这个性质,我们可以预处理出这个数列的对称点对。然后最后一个对称段是从哪里开始的,做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 ;
}

最新文章

  1. css清除浮动深度解析
  2. 第三个Sprint冲刺第四天
  3. paip.ikanalyzer 重加载词库的方法.
  4. debian hosts文件中的 127.0.1.1 主机地址
  5. 【Android - 进阶】之事件分发机制
  6. warning: no newline at end of file
  7. hdu 4758 Walk Through Squares
  8. python 10min系列之实现增删改查系统
  9. 深入tornado中的TCPServer
  10. 在MFC中使用按下按钮出现选择文件对话框,选中一个指定文件,并将其地址显示到指定的编辑框中
  11. Django数据库操作中You are trying to add a non-nullable field &#39;name&#39; to contact without a default错误处理
  12. bzoj1861
  13. Py中查看数据类型【转载】
  14. Gradient Domain Guided Image Filtering(梯度域导向滤波)
  15. 判断页面是app打开还是浏览器打开。cookie
  16. 关于GDI+的一些使用基础设置
  17. map和jsonObject 这2中数据结构之间转换
  18. maven:新建的maven工程需要添加一下插件
  19. IOS----UIScrollerView的使用
  20. 架构师必须搞懂DNS【转】

热门文章

  1. Glidar测试安装
  2. SpringMVC学习(二)——SpringMVC架构及组件(及其运行原理)-转载
  3. Javascript平稳退化、渐进增强
  4. Js中遇到的坑点汇总
  5. vue的表格加单选框
  6. 【BZOJ4487】【JSOI2015】染色问题
  7. 51nod 1325 两棵树的问题(最大权闭合子图)
  8. Object-C,NSSet,不可变集合
  9. Qt5.7新特性
  10. HDU 1026 Ignatius and the Princess I(BFS+记录路径)