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 ...
随机推荐
- 项目中非常有用并且常见的ES6语法
今天闲着无事,梳理下ES6常见的语法知识点:除此之外的知识点自行细化和梳理! <!DOCTYPE html> <html> <head> <meta char ...
- Hadoop 安装过程中出现的问题
1.hadoop-daemon.sh start namenode 启动失败 查看hadoop/logs 下面的日志 出现 2017-04-11 15:35:13,860 WARN org.apach ...
- python 网络编程篇
基础模拟通话网络程序: #客户端 import socket client = socket.socket() client.connect(('localhost',6969)) client.se ...
- fsck - 检查并修复Linux文件系统
总览 SYNOPSIS fsck [ -sACVRTNP ] [ -t fstype ] [filesys ... ] [--] [ fs-specific-options ] 描述 DESCRIPT ...
- b继承a的函数
var cls={ my:, init:function() { alert(this.my.a); }};window.onload=function(){ cls.init();} 调用cls.i ...
- SpringBoot自定义一个starter
@Configuration //指定这个类是一个配置类 @ConditionalOnXXX //在指定条件成立的情况下自动配置类生效 @AutoConfigureAfter //指定自动配置类的顺序 ...
- PHP07 函数
学习要点 函数的定义 自定义函数 函数的工作原理和结构化编程 PHP变量范围 声明及应用各种形式的PHP函数 递归函数 使用自定义函数库 匿名函数和闭包 常用PHP系统函数 PHP7函数新特性 函数的 ...
- zabbix auto registration
1./etc/zabbix/zabbix_agent.conf serverActive=zabbix server ip 2.frontend configuration>actions> ...
- Needleman_Wunsch
Needleman_Wunsch算法思路: 1.建立二维数组 2.建立评分模式 load1:向右:-2 load2:向下:-2 load3:对角线:依据是否配得到 匹配:+1 不匹配:-1 3.双层循 ...
- Spring Data Redis入门示例:字符串操作(六)
Spring Data Redis对字符串的操作,封装在了ValueOperations和BoundValueOperations中,在集成好了SPD之后,在需要的地方引入: // 注入模板操作实例 ...