51NOD 1452 - 加括号
DP预处理每个区间的值,再枚举括号位置就好了
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 5005;
char s[N];
int pre[N], nxt[N], n;
ll dp[N][N];
void init() {
pre[0] = 0;
for (int i = 1; i <= n; i++)
if (s[i] == '+') pre[i] = i;
else pre[i] = pre[i-1];
nxt[n+1] = n+1;
for (int i = n; i >= 1; i--)
if (s[i] == '+') nxt[i] = i;
else nxt[i] = nxt[i+1];
for (int i = 1; i <= n; i += 2) dp[i][i] = s[i]-'0';
for (int l = 3; l <= n; l += 2) {
for (int i = 1; i <= n-l+1; i += 2) {
int j = i+l-1;
if (pre[j] < i) dp[i][j] = dp[i][j-2]*(s[j]-'0');
else dp[i][j] = dp[i][pre[j]-1] + dp[pre[j]+1][j];
}
}
}
int main() {
scanf("%s", s+1);
n = strlen(s+1);
init();
ll ans = dp[1][n];
for (int i = 1; i <= n; i += 2) {
for (int j = i+2; j <= n; j += 2) {
if (s[i-1] != '*' && s[j+1] != '*') continue;
ll res = 0;
if (pre[i] > 0) res += dp[1][pre[i]-1];
if (nxt[j] < n+1) res += dp[nxt[j]+1][n];
ll tmp = dp[i][j];
if (pre[i]+1 <= i-2) tmp *= dp[pre[i]+1][i-2];
if (nxt[j]-1 >= j+2) tmp *= dp[j+2][nxt[j]-1];
res += tmp;
ans = max(ans, res);
}
}
printf("%lld\n", ans);
}
51NOD 1452 - 加括号的更多相关文章
- new对象时,类名后加括号与不加括号的区别
[1]默认构造函数 关于默认构造函数,请参见随笔<类中函数> 请看测试代码: 1 #include <iostream> 2 using namespace std; 3 4 ...
- js----方法是否加括号的问题
在我们js编写程序的时候,我们会写很多函数然后调用它们,那么这些函数调用的时候什么时候加()什么时候不加()?记住以下几个要点. (1)函数做参数时都不要括号. function fun(e) { a ...
- C++中创建对象的时候加括号和不加括号的区别
c++创建对象的语法有----- 1 在栈上创建 MyClass a; 2 在堆上创建加括号 MyClass *a= new MyClass(); 3 不加括号 MyClass *a = new My ...
- 知识点摸清 - - function()——JavaScript 函数名后什么时候加括号,什么时候不
加括号——调用函数 只要是要调用函数执行的,都必须加括号. 此时,function()实际上等于函数的返回值.(没有返回值也已经执行了函数体内的行为).就是说,只要加括号的,就代表将会执行函数体代码. ...
- Js函数加括号、不加括号(转)
函数只要是要调用它进行执行的,都必须加括号.此时,函数()实际上等于函数的返回值.当然,有些没有返回值,但已经执行了函数体内的行为,这个是根本,就是说,只要加括号的,就代表将会执行函数体代码. 不加括 ...
- JS调用函数时候加括号与只写函数名字的区别 fn与fn()的区别
经常见插件里面函数调用的时候只写个函数名字,不写函数参数,甚至连括号也不写,比如说: <!DOCTYPE html> <html> <head> <meta ...
- python中 函数名加括号与不加括号
加括号是返回函数的结果,不加括号相当于函数的调用.
- 【转】new对象时,类名后加括号和不加括号的区别
请看测试代码: #include <iostream> using namespace std; // 空类 class empty { }; // 一个默认构造函数,一个自定义构造函数 ...
- 【转】JavaScript eval处理JSON数据 为什么要加括号
由于Ajax的兴起,JSON这种轻量级的数据格式作为客户端与服务器之间的传输格式逐渐地流行起来,进而出现的问题是如何将服务器端构建好的JSON数据转化为可用的JavaScript对象.利用eval函数 ...
随机推荐
- (二)spring初次遇见shiro
文章目录 集成 Spring 集成中的坑 shiroFilter 的工作原理 权限配置细节 集成 Spring pom.xml 添加shiro相关的依赖 我使用的版本是 ${version.shiro ...
- stm32之中断响应优先级
1)中断响应分为:自然优先级.抢占优先级.响应优先级. 2)抢占优先级和响应优先级,其实是一个中断所包含的两个优先级,其中前者是抢占优先级之间的级别划分,后者是相同抢占优先级的优先级别的划分. 中断A ...
- Maven学习存档(2)——settings.xml配置
二.settings.xml配置 2.1 原文 <?xml version="1.0" encoding="UTF-8"?> <!-- Lic ...
- python检测挖矿特征的几种方式
电脑性能上: ①cpu和内存使用率(常见): python 实时得到cpu和内存的使用情况方法_python_脚本之家https://www.jb51.net/article/141835.htm ② ...
- spring源码学习(一)--AOP初探
LZ以前一直觉得,学习spring源码,起码要把人家的代码整体上通读一遍,现在想想这是很愚蠢的,spring作为一个应用平台,不是那么好研究透彻的,而且也不太可能有人把spring的源码全部清楚的过上 ...
- PAT-1030 Travel Plan (30 分) 最短路最小边权 堆优化dijkstra+DFS
PAT 1030 最短路最小边权 堆优化dijkstra+DFS 1030 Travel Plan (30 分) A traveler's map gives the distances betwee ...
- js基本用法
1. 在HTML里面加入JavaScript 方法非常简单,就是通过一对<script></script>标签,然后在标签里面书写代码即可 2. 标签位置 按照以前传统的方法, ...
- 在Windows上安装Redis
微软官网源码 https://github.com/MicrosoftArchive/redis 这里介绍安装Signed binaries版本 使用Chocolatey(Windows包管理工具)安 ...
- jq的ajax方法
相较与js异步对象的繁琐,jq的ajax对象结构更加清晰 一:ajax对象简述 ajax(Asynchronous JavaScript and XML),异步的xml和js对象,主要用于在不刷新全局 ...
- Bootstrap源码
1.Bootstrap Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML.CSS.JavaScript 开发的简洁.直观.强悍的前端开 ...