ZOJ4027 Sequence Swapping DP
2024-09-01 05:31:22
link:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4027
题意:
有一个括号序列,每个括号对应一个值,现在可以使得相邻的()进行交换,并得到两个值的乘积,问最后能得到的最大值。
思路:
从后向前考虑,取后缀最大值。
#include <bits/stdc++.h> using namespace std; #define pb push_back
#define fi first
#define se second typedef long long ll;
typedef pair<int, int> pii; const int inf = 0x3f3f3f3f;
const int maxn = 1e3+; char str[maxn];
ll dp[maxn],mul[maxn],a[maxn];
int main(){
int T; scanf("%d", &T);
while(T--) {
int n; scanf("%d", &n);
scanf("%s", str+);
for(int i=; i<=n; i++) scanf("%lld", &a[i]);
for(int i=; i<=n; i++) dp[i] = ;
ll ans = ;
for(int i=n; i>=; i--) {
if(str[i] == '(') {
ll sum = ;
for(int j=; j<=n; j++) mul[j] = ;
for(int j=i; j<=n; j++) {
if(str[j] == ')')sum += a[i] * a[j];
mul[j] = sum;
}
ll mx = -2e18;
for(int j=n; j>; j--) {
mx = max(mx, dp[j]);
dp[j] = mx + mul[j];
ans = max(ans, dp[j]);
}
}
}
printf("%lld\n", ans);
}
return ;
}
最新文章
- Linux安全基础:vi的使用
- 数组类型与sizeof与指针的引用
- 如何让nodejs同步操作
- win10搭建代理服务器实现绕过校园网的共享限制--从入门到放弃
- JAVA缓存技术之EhCache
- Ubuntu/Debian 安装lxml的正确方式
- margin的重叠现象
- win2003 sp2+iis 6.0上部署.net 2.0和.net 4.0网站的方法
- Linux命令——创建删除文件
- sql server 调优----索引缺失
- ScalaPB(1): using protobuf in akka
- C++解析九-数据抽象
- Redis怎么保持缓存与数据库一致性?
- POJ 2876
- js通过class获取元素
- erp前端项目总结
- 潜类别模型(Latent Class Modeling)
- [SoapUI]怎样配置SoapUI运行的不同环境,并在Jenkins上面通过命令调用不用的环境
- CentOS 7_64位系统下搭建Hadoop_2.8.0分布式环境
- August 01st 2017 Week 31st Tuesday