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之22:DefaultListableBeanFactory
1. DefaultListableBeanFactory的作用: 默认实现了ListableBeanFactory和BeanDefinitionRegistry接口,基于bean definitio ...
- Visual Studio 2019 离线安装方法
1. 网址 1.1 阅读官方离线安装教程 离线安装官网 仔细阅读离线安装官网,差不多就能学会如何下载. 1.2 工作负荷和组件 ID 进入这个网址,Visual Studio 工作负荷和组件 ID,单 ...
- 【已解决】每次打开Excel时会同时打开一个空的Excel表格
每次打开Excel时会同时打开一个空的Excel表格,情况如图. 官方解法如下,本人验证有效: 方法1, 请到以后路径中检查是否存在与空白文件夹同名字的Excel文件,删除它. C:\Users\\A ...
- 【springcloud】1.微服务之springcloud-》eureka源码分析之请叫我灵魂画师。。。
- PB计算两个日期相差月份(计算工龄)
ll_intime_y = year(date(this.object.in_factory_day[row])) ll_intime_m = month(date(this.object.in_fa ...
- Advanced REST Client 的安装
1.解压Advanced-REST-client_v3.1.9.zip到当前文件夹,得到Advanced-REST-client_v3.1.9目录 2.在Chrome浏览器中打开:chrom ...
- php 判断请求是否是json
$object =file_get_contents("php://input"); $arr = is_json($object); if($arr){ var_dump($ar ...
- 使用winsw将springboot打包的jar注册系统本地服务
1.下载winsw 下载地址:https://github.com/kohsuke/winsw/releases 我这里下载的是2.3.0版. 下载sample-minimal.xml和WinSW.N ...
- 在论坛中出现的比较难的sql问题:28(循环查询表来实现递归)
原文:在论坛中出现的比较难的sql问题:28(循环查询表来实现递归) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有必 ...
- 在ubuntu 16.04 的vm中添加新网卡,同一网段不同ip
在ubuntu 16.04 的vm中添加新网卡,同一网段不同ip 来源 https://blog.51cto.com/744478/2083672 在ubuntu 16.04 的vm中新加了一块网卡, ...