题意:一串括号,每个括号代表一个值,当有相邻括号组成()时,可以交换他们两个并得到他们值的乘积,问你最大能得到多少

思路: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)题解的更多相关文章

  1. 第15届浙江省赛 D Sequence Swapping(dp)

    Sequence Swapping Time Limit: 1 Second      Memory Limit: 65536 KB BaoBao has just found a strange s ...

  2. ZOJ4027 Sequence Swapping DP

    link:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4027 题意: 有一个括号序列,每个括号对应一个值,现在可以使得相 ...

  3. [JSOI2008]Blue Mary的战役地图——全网唯一一篇dp题解

    全网唯一一篇dp题解 网上貌似全部都是哈希+二分(反正我是大概baidu了翻了翻)(还有人暴力AC了的..) 哈希还是相对于dp还是比较麻烦的. 而且正确性还有可能被卡(当然这个题不会) 而且还容易写 ...

  4. ZOJ Problem Set - 3822Domination(DP)

    ZOJ Problem Set - 3822Domination(DP) problemCode=3822">题目链接 题目大意: 给你一个n * m的棋盘,每天都在棋盘上面放一颗棋子 ...

  5. 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 ...

  6. Arithmetic Sequence(dp)

    Arithmetic Sequence Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 51  Solved: 19[Submit][Status][We ...

  7. D:Sequence Swapping

    BaoBao has just found a strange sequence {<, >, <, >, , <, >} of length in his poc ...

  8. poj 1141 Brackets Sequence (区间dp)

    题目链接:http://poj.org/problem?id=1141 题解:求已知子串最短的括号完备的全序列 代码: #include<iostream> #include<cst ...

  9. [原]POJ1141 Brackets Sequence (dp动态规划,递归)

    本文出自:http://blog.csdn.net/svitter 原题:http://poj.org/problem?id=1141 题意:输出添加括号最少,并且使其匹配的串. 题解: dp [ i ...

随机推荐

  1. Oracle数据库备份实验笔记[不完整,内容乱]

    rman target / log=/orasoft/backup/${DATE}backup1.log <<EOFrun {allocate channel c1 device type ...

  2. factory源码分析——component_registry和object_registry

    registry类主要是为object和component提供一个轻量级的代理(lightweight proxy)来方便factory实现: registry class从uvm_object_wr ...

  3. Unity 异步加载进度条

    public class View_LoadingScene : MonoBehaviour { //场景加载进度条对象 public GameObject loadingProgressBar; / ...

  4. python 读csv格式的文件

    对于大多数的CSV 格式的数据读写问题,都可以使用csv 库 1. 直接读csv 以下是要操作的csv文件内容 import csv with open(r'C:\Temp\f.csv') as f: ...

  5. xmldecoder漏洞

    https://blog.csdn.net/youanyyou/article/details/78990312

  6. python小练习:读入一个考试得分,判断这个分数是哪个等级,并输出,考虑异常场景

    读入一个考试得分,判断这个分数是哪个等级,并输出. 等级:>=90 优 ,>=80且小于90 良,>=70 且小于80,中,>=60且<70及格  <60 不及格 ...

  7. PHP json_encode函数中需要注意的地方

    在php中使用 json_encode() 内置函数可以使用得php中的数据更好的与其它语言传递与使用. 这个函数的功能是将数组转换成json数据存储格式: 1 <?php 2 $arr=arr ...

  8. android基本架构

    Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA ...

  9. Python爬虫_Selenium与PhantomJS

    Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动化操作,不同是Selenium可以直接运 ...

  10. CentOS下shell显示-bash-4.1$不显示用户名路径

    Linux CentOS下shell显示-bash-4.1$不显示用户名路径的解决方法. 问题描述: CentOS下新增一个用户,登录进去之后shell脚本的信息如下: -bash-4.1$ \ -b ...