给一个只有加号和乘号的表达式,要求添加一对括号使得最后结果最大。表达式长度5000,乘号最多12个,表达式中数字只有1位。

左括号一定在乘号右边,右括号一定在乘号左边,因为如果不是这样的话,一定可以调整括号的位置使表达式的值增大。

于是只要枚举括号的位置然后计算表达式即可。【以上来源,懒得自己写了】

做到这道题的时候突然发现自己忘记表达式求值怎么求了

这个表达式只有括号,加号和乘号

大概用到了后缀表达式的思想,但不会去真正化成后缀表达式

建两个栈,一个char类型,一个int类型

从左到右扫描,

如果是数,则直接压入int栈中

如果是'*'或者'(',则将其加入char栈中

如果是是')',则不断地将符号从char栈中取出来,直到遇到'(',最后在把'('弹出

每从char中取出一个元素,

从int栈中取出两个元素,进行相应的操作,然后重新放回int栈中。

当扫描完整个表达式后,如果char栈中还有符号,

不断地弹出弹出,操作同上。。

就这样:)

#include<bits/stdc++.h>
#define eps 1e-9
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define MAXN 1005
#define MAXM 40005
#define INF 0x3fffffff
#define PB push_back
#define MP make_pair
#define X first
#define Y second
#define lc (k<<1)
#define rc ((k<<1)1)
using namespace std;
typedef long long LL;
LL i,j,k,n,m,x,y,T,ans,big,cas,num,len;
bool flag; stack<char> tt;
stack<LL> an;
char ss[];
char s[]; LL calc(LL l,LL r)
{
LL i,j;
while (!tt.empty()) tt.pop();
LL nn=; while (!an.empty()) an.pop();
for (i=;i<len;i++)
{
if (i==r)
{
char c=tt.top();
while (c!='(')
{
LL u=an.top();an.pop();
LL v=an.top();an.pop();
if(c=='+') an.push(u+v);
else if (c=='*') an.push(u*v);
tt.pop();
c=tt.top();
}
tt.pop();
} if (s[i]=='*') tt.push(s[i]);else
if (s[i]=='+')
{
while (!tt.empty() && tt.top()=='*')
{
LL u=an.top();an.pop();
LL v=an.top();an.pop();
an.push(u*v);
tt.pop();
}
tt.push(s[i]);
}else
if (s[i]>='' && s[i]<='')
{
an.push(s[i]-'');
} if (i==l)
{
tt.push('(');
}
}
while (!tt.empty())
{
char c=tt.top();
LL u=an.top();an.pop();
LL v=an.top();an.pop();
if(c=='+') an.push(u+v);
else if (c=='*') an.push(u*v);
tt.pop();
} return an.top();
} vector<LL> mul; int main()
{
scanf("%s",s+);
s[]='';
s[]='*';
len=strlen(s);
s[len]='*';
s[len+]='';
s[len+]=;
len=strlen(s);
//printf("%s\n",s); mul.clear();
for (i=;i<len;i++)
{
if (s[i]=='*') mul.PB(i);
}
ans=;
for (i=;i<mul.size();i++)
{
for (j=i+;j<mul.size();j++)
{ LL tmp=calc(mul[i],mul[j]);
ans=max(ans,tmp);
}
}
printf("%I64d\n",ans);
return ;
}

Codeforces 552E - Vanya and Brackets【表达式求值】的更多相关文章

  1. codeforces 552 E. Vanya and Brackets 表达式求值

    题目链接 讲道理距离上一次写这种求值的题已经不知道多久了. 括号肯定是左括号在乘号的右边, 右括号在左边. 否则没有意义. 题目说乘号只有15个, 所以我们枚举就好了. #include <io ...

  2. Codeforces 552E Vanya and Brackets(枚举 + 表达式计算)

    题目链接 Vanya and Brackets 题目大意是给出一个只由1-9的数.乘号和加号组成的表达式,若要在这个表达式中加上一对括号,求加上括号的表达式的最大值. 我们发现,左括号的位置肯定是最左 ...

  3. CodeForces - 552E Vanya and Brackets

    Vanya and Brackets Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u ...

  4. CodeForces - 552E Vanya and Brackets —— 加与乘运算的组合

    题目链接:https://vjudge.net/contest/224393#problem/E Vanya is doing his maths homework. He has an expres ...

  5. CF552E 字符串 表达式求值

    http://codeforces.com/contest/552/problem/E E. Vanya and Brackets time limit per test 1 second memor ...

  6. 表达式求值(noip2015等价表达式)

    题目大意 给一个含字母a的表达式,求n个选项中表达式跟一开始那个等价的有哪些 做法 模拟一个多项式显然难以实现那么我们高兴的找一些素数代入表达式,再随便找一个素数做模表达式求值优先级表 - ( ) + ...

  7. 用Python3实现表达式求值

    一.题目描述 请用 python3 编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 二.输入描 ...

  8. 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值

    一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...

  9. nyoj305_表达式求值

    表达式求值 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...

随机推荐

  1. 浅析Linux操作系统工作的基础

    环境:lubuntu 13.04   kernel 3.9.7 作者:SA12226265 katao 简介: 本文根据 Linux™ 系统工作基础的分析,对存储程序计算机.堆栈(函数调用堆栈)机制和 ...

  2. 字符串搜索算法Boyer-Moore

    整理日: 2015年2月16日 1. 主要特征 假设文本串text长度为n,模式串pattern长度为m,BM算法的主要特征为: 从右往左进行比较匹配(一般的字符串搜索算法如KMP都是从从左往右进行匹 ...

  3. 【技术贴】解决myeclipse SVN 提交代码 commit:remains in tree-c

    [技术贴]解决myeclipse SVN 提交代码 commit:remains in tree-conflict错误的解决办法 错误是:Aborting commit: xxxxx' remains ...

  4. 当今流行的 React.js 适用于怎样的 Web App?

    外村 和仁(株式会社 ピクセルグリッド)  React.js是什么? React.js是Facebook开发的框架. http://facebook.github.io/react/ 官网上的描述是「 ...

  5. SysErrorMessage 函数和系统错误信息表

    在看 API 文档时, 我们经常见到 GetLastError; 它可以返回操作后系统给的提示.但 GetLastError 返回的只是一个信息代码, 如何返回对应的具体信息呢?FormatMessa ...

  6. quartz源码解析--转

    quartz源码解析(一)  . http://ssuupv.blog.163.com/blog//146156722013829111028966/ 任何个人.任何企业.任何行业都会有作业调度的需求 ...

  7. java 集合框架图

    Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型. Java 2集合框架图集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架 ...

  8. WordPress Design Approval System插件‘step’参数跨站脚本漏洞

    漏洞名称: WordPress Design Approval System插件‘step’参数跨站脚本漏洞 CNNVD编号: CNNVD-201309-084 发布时间: 2013-09-11 更新 ...

  9. 【转】iOS开发入门:Xcode常用快捷键

    原文网址:http://www.3g-edu.org/ios_free/3G-89.htm Xcode有许多快捷键,这些快捷键在Xcode的工具栏里都有标注,学会使用这些快捷键可以大大的提高你的编程效 ...

  10. 高德地图搜索提示获取信息回传activity刷新ui(二)

    应用场景: 在主activity中点击进入到另一个activity搜索提示,获取经纬度,点确定返回到主activity,虽然说需求很奇葩,但是遇到了没办法.. 主要包含两部分,搜索提示+activit ...