zoj4027 Sequence Swapping
首先容易想到二维方程dp(i,j),表示第i个左括号去匹配到第j个右括号时产生的最大值,但如果如此表示的话,首先需要枚举(i,j)以及一个k即dp(i-1,k)。
考虑变化dp(i,j)的表示方法,可选择将其表示为第i个左括号至少匹配到第j个右括号时所产生的最大值。如此表示的话,则转移方程为
dp(i,j) = max(dp(i,j+1),dp(i+1,j) + a(i,j))此时不再需要枚举k了,其中a(i,j)表示由第i个左括号匹配到第j个右括号时得到的值。另外注意左括号不去匹配右括号时的情况,
这个情况需要另行添加。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<string>
#include<set>
#include<algorithm>
#include<vector>
#include<queue>
#include<list>
#include<cmath>
#include<cstring>
#include<map>
#include<stack>
using namespace std;
#define INF 0x3f3f3f3f
#define maxn 200005
#define ull unsigned long long
#define ll long long
#define hashmod 99999839
#define mod 7
#define repe(x,y,i) for(int i=(x);i<=(y);++i)
#define repne(x,y,i) for(int i=(x);i<(y);++i)
#define MAX(x,y) (x) < (y) ? (y) : (x);
char s[];
int p0[],p1[];
ll v[];
ll a[][];
ll dp[][];//第i个0至少匹配到第j个1产生的最大值
int main(){
// freopen("a.in","r",stdin);
// freopen("b.out","w",stdout);
int T,n;
cin >> T;
while(T--){
scanf("%d",&n);
scanf("%s",s);
int st = ,en = n - ,len0,len1;
for(int i = ;i < n;++i) scanf("%lld",&v[i]);
for(;s[st] != '(';++st);
for(;s[en] != ')';--en);
len0 = len1 = ;//存在不进行匹配的情况放到0
for(int i = st;i <= en;++i){
if(s[i] == '(') p0[len0++] = i;
else p1[len1++] = i;
}
memset(a,,sizeof(a));
for(int i = ;i < len0;++i){//预处理前缀和
int l = p0[i];
for(int j = ;j < len1;++j){
if(l < p1[j]) a[i][j] = a[i][j-] + v[l] * v[p1[j]];
}
}
memset(dp,,sizeof(dp));
dp[len0-][len1 - ] = a[len0-][len1-];
ll ans = ;
for(int i = len1 - ;i >= ;--i) dp[len0 - ][i] = max(a[len0-][i],dp[len0-][i+]);
for(int i = len0 - ;i >= ;--i){
dp[i][len1 - ] = dp[i+][len1 - ] + a[i][len1 - ];
for(int j = len1 - ;j >= ;--j){
dp[i][j] = max(dp[i][j+],dp[i+][j]+a[i][j]);
if(i == ) ans = max(dp[i][j],ans);
}
}
printf("%lld\n",ans);
}
return ;
}
zoj4027 Sequence Swapping的更多相关文章
- ZOJ4027 Sequence Swapping DP
link:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4027 题意: 有一个括号序列,每个括号对应一个值,现在可以使得相 ...
- 第15届浙江省赛 D Sequence Swapping(dp)
Sequence Swapping Time Limit: 1 Second Memory Limit: 65536 KB BaoBao has just found a strange s ...
- D:Sequence Swapping
BaoBao has just found a strange sequence {<, >, <, >, , <, >} of length in his poc ...
- ZOJ 4027 Sequence Swapping(DP)题解
题意:一串括号,每个括号代表一个值,当有相邻括号组成()时,可以交换他们两个并得到他们值的乘积,问你最大能得到多少 思路:DP题,注定想得掉头发. 显然一个左括号( 的最远交换距离由他右边的左括号的最 ...
- 2018浙江省赛(ACM) The 15th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple
我是铁牌选手 这次比赛非常得爆炸,可以说体验极差,是这辈子自己最脑残的事情之一. 天时,地利,人和一样没有,而且自己早早地就想好了甩锅的套路. 按理说不开K就不会这么惨了啊,而且自己也是毒,不知道段错 ...
- [POJ 1674] Sorting by Swapping
Sorting by Swapping Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9514 Accepted: 50 ...
- oracle SEQUENCE 创建, 修改,删除
oracle创建序列化: CREATE SEQUENCE seq_itv_collection INCREMENT BY 1 -- 每次加几个 STA ...
- Oracle数据库自动备份SQL文本:Procedure存储过程,View视图,Function函数,Trigger触发器,Sequence序列号等
功能:备份存储过程,视图,函数触发器,Sequence序列号等准备工作:--1.创建文件夹 :'E:/OracleBackUp/ProcBack';--文本存放的路径--2.执行:create or ...
- DG gap sequence修复一例
环境:Oracle 11.2.0.4 DG 故障现象: 客户在备库告警日志中发现GAP sequence提示信息: Mon Nov 21 09:53:29 2016 Media Recovery Wa ...
随机推荐
- Verilog设计中的锁存器
问题: 什么是锁存器? 什么时候出现锁存器? 锁存器对电路有什么影响? 如何在FPGA设计中避免锁存器? 在FPGA设计中应该避免锁存器.实际上,锁存器与D触发器实现的逻辑功能基本相同,都有暂存数据的 ...
- iPhone4 offical AD
iPhone4 is so much more than just a new products.I mean this would have a lot of impact on the way i ...
- 谷歌 滚动条样式 scrollbar
谷歌 滚动条样式 scrollbar main.less :: 是css3 最新的伪类 /*滚动条整体样式*/ ::-webkit-scrollbar { width: 10px; height: ...
- docker 框架概述
docker的框架 docker 使用传统的client-server架构模式,用户端通过docker client 与docker daemon 建立通信,并将请求发送给后者,而docker后端时 ...
- docker 的容器入门
Linux Namespace LXC所实现的隔离性主要是来自kernel的namespace, 其中pid, net, ipc, mnt, uts 等namespace将container的进程, ...
- Java数据结构和算法(一)--栈
栈: 英文名stack,特点是只允许访问最后插入的那个元素,也就是LIFO(后进先出) jdk中的stack源码: public class Stack<E> extends Vector ...
- sublime中使用markdown并实时编辑
1.需求 想在sublime中编辑.md文件 2.步骤 找到菜单栏: 快捷键,shift + command + p,选择 Package Control:Install Package, 没有找到P ...
- 717. 1-bit and 2-bit Characters@python
We have two special characters. The first character can be represented by one bit 0. The second char ...
- 倍增实现LCA
Today,we will talk about how to find The Least Common Ancestor. Now ,let us get into the business(正题 ...
- 表单中的ngModelController
测试表单中的ngController.直接看红字结论部分即可 <!DOCTYPE html> <html lang="en"> <head> & ...