给一个只有加号和乘号的表达式,要求添加一对括号使得最后结果最大。表达式长度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. jq总结1

    选择器 /** * 多目标选择器 * 可以选择多个元素或者表达式, * 包装成 jQuery 对象的集合 * 例子:$("div,span") */ $("table t ...

  2. hadoop 常用配置项

    core-site.xml  name value  Description   fs.default.name hdfs://hadoopmaster:9000 定义HadoopMaster的URI ...

  3. Web-Scale-IT 到底是啥?

    Gartner 对 2015 年 10 大 IT 趋势的预测中有一个词条为:Web Scale IT.我们跟随 Matthias Ankli 来了解一下究竟什么是 Web Scale IT.本文译自 ...

  4. java.util.regex.Pattern的应用

    java.util.regex.Pattern 正则表达式的一种已编译的实现. 正则表达式通常以字符串的形式出现,它首先必须被编译为Pattern类的一个实例.结果模型可以用来生成一个Matcher, ...

  5. CAVLC

    在H.264标准中,CAVLC(Context-based Adaptive Variable Length Coding)被用于亮度和色度残差数据编码.在标准的码流结构中,CAVLC编码方式描述为c ...

  6. Java多线程同步方法Synchronized和volatile

    11 同步方法  synchronized – 同时解决了有序性.可见性问题  volatile – 结果可见性问题 12 同步- synchronized synchronized可以在任意对象上加 ...

  7. 常见的Robotium测试的问题总结:

    常见的Robotium测试的问题总结:(从别处拿来的先mark一下) 1.Robotium的 测试类ActivityInstrumentationTestCase2继承了TestCase类,即robo ...

  8. NOIP2014解方程

    题目:求一个n次整系数方程在1-m内的整数解  n<=100 系数<=10000位 m<=100W 题解:最暴力的想法是枚举x,带入求值看是否为0. 这样涉及到高精度乘高精度,高精度 ...

  9. 【转】VC++ MFC 常用技巧(一)

    原文网址:http://www.lewensky.cn/read.php/106.htm (-). 下面是常见的Afx全局函数: AfxFormatString1:类似printf一般地将字符串格式化 ...

  10. web页面布局思想

    一.盒子模型 网页可以看成由一个个"盒子"组成,如图: 由上图可以看出,页面分为上(网站导航).中.下(版权声明)三个部分,中间部分又分为左(商品分类).中(主要部分).右,这些版 ...