ZOJ 4027 Sequence Swapping(DP)题解
题意:一串括号,每个括号代表一个值,当有相邻括号组成()时,可以交换他们两个并得到他们值的乘积,问你最大能得到多少
思路:DP题,注定想得掉头发。
显然一个左括号( 的最远交换距离由他右边的左括号的最终位置决定,那么我们可以从右边开始做。我们用dp[i][j]表示第i个左括号交换到第j个位置后,他和他后面左括号所能得到的最大值。显然,dp[i][j] = i交换得到的值 + 后面左括号产生的最大值。而后面左括号能产生的最大值显然就是max(dp[i+1][k])其中j <= k <= n。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e3 + ;
const int INF = 0x3f3f3f3f;
char s[maxn];
ll v[maxn], n, Max, pos[maxn], sum[maxn]; ///Max[i]定义为后面的交换到i的最大值
ll dp[maxn][maxn]; ///第i个放在j位置得到的最大值
int main(){
int t, cnt;
scanf("%d", &t);
while(t--){
cnt = ;
scanf("%lld", &n);
scanf("%s", s + );
sum[] = ;
for(int i = ; i <= n; i++){
scanf("%lld", &v[i]);
if(s[i] == ')') sum[i] = sum[i - ] + v[i];
else pos[++cnt] = i, sum[i] = sum[i - ];
}
memset(dp, , sizeof(dp));
for(int i = cnt; i >= ; i--){
int u = pos[i];
Max = -INF;
for(int j = n; j >= u; j--){
Max = max(Max, dp[i + ][j]);
dp[i][j] = (sum[j] - sum[u - ]) * v[u] + Max;
}
}
ll ans = -INF;
for(int i = ; i <= n; i++)
ans = max(ans, dp[][i]);
printf("%lld\n", ans);
}
return ;
}
ZOJ 4027 Sequence Swapping(DP)题解的更多相关文章
- 第15届浙江省赛 D Sequence Swapping(dp)
Sequence Swapping Time Limit: 1 Second Memory Limit: 65536 KB BaoBao has just found a strange s ...
- ZOJ4027 Sequence Swapping DP
link:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4027 题意: 有一个括号序列,每个括号对应一个值,现在可以使得相 ...
- [JSOI2008]Blue Mary的战役地图——全网唯一一篇dp题解
全网唯一一篇dp题解 网上貌似全部都是哈希+二分(反正我是大概baidu了翻了翻)(还有人暴力AC了的..) 哈希还是相对于dp还是比较麻烦的. 而且正确性还有可能被卡(当然这个题不会) 而且还容易写 ...
- ZOJ Problem Set - 3822Domination(DP)
ZOJ Problem Set - 3822Domination(DP) problemCode=3822">题目链接 题目大意: 给你一个n * m的棋盘,每天都在棋盘上面放一颗棋子 ...
- Codeforces Beta Round #5 C. Longest Regular Bracket Sequence 栈/dp
C. Longest Regular Bracket Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.c ...
- Arithmetic Sequence(dp)
Arithmetic Sequence Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 51 Solved: 19[Submit][Status][We ...
- D:Sequence Swapping
BaoBao has just found a strange sequence {<, >, <, >, , <, >} of length in his poc ...
- poj 1141 Brackets Sequence (区间dp)
题目链接:http://poj.org/problem?id=1141 题解:求已知子串最短的括号完备的全序列 代码: #include<iostream> #include<cst ...
- [原]POJ1141 Brackets Sequence (dp动态规划,递归)
本文出自:http://blog.csdn.net/svitter 原题:http://poj.org/problem?id=1141 题意:输出添加括号最少,并且使其匹配的串. 题解: dp [ i ...
随机推荐
- Visio 保存卡死解决办法
右键Visio图标 属性--兼容性--以兼容模式运行这个程序 要打上对勾 且下面的系统版本要选和你电脑版本一致的选项 特权等级 以管理员身份运行次程序 要打上对勾
- 水题 K
输入4行全部由大写字母组成的文本,输出一个垂直直方图,给出每个字符出现的次数.注意:只用输出字符的出现次数,不用输出空白字符,数字或者标点符号的输出次数. Input输入包括4行由大写字母组成的文本, ...
- SQl server更新某阶段的匹配关系。
DECLARE @count INTEGERDECLARE @id INTEGERDECLARE @subjectID INTEGERSET @count=1SET @id =11894SET @su ...
- [mysql]Date和String相互转换(DATE_FORMAT&STR_TO_DATE)
1.Date ——> String 使用的函数:DATE_FORMAT(date,format) date:需要转换的日期 format:格式化的样式 format样式整 ...
- mysql按天,按周,按月,按季度,按年统计数据
/*查询2小时前的数据*/select * from tableName WHERE create_time HOUR) SELECT count(id) FROM rd_track_info WHE ...
- Jmeter自己jar包的引用
1.编写清空指定文件夹里所有内容的jar包 package org.na;import java.io.File;public class deletedir { public static b ...
- 华为手机安装 charles 证书
- HADOOP nutch java mysql
下载Hadoop安装包 wget http://apache.fayea.com/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz java安装 wg ...
- Django 自定义
from django.db import models class MyCharfield(models.Field): def __init__(self,max_length,*args,**k ...
- sping的quartz设置定时任务
除了spring相关的jar包之外,还需要引入quartz-all-1.8.6.jar 下载地址:http://www.quartz-scheduler.org/downloads/ spring配置 ...