51nod 1452:加括号 python eval

来源:互联网 发布:淘宝美工教程视频 编辑:程序博客网 时间:2024/06/16 15:55

1452 加括号
题目来源: CodeForces
基准时间限制:1 秒 空间限制:524288 KB 分值: 80 难度:5级算法题
 收藏
 关注

有一个算术表达式 x1 Δ x2 Δ x3 Δ ,..., Δ xn, x1,x2,x3,...,xn 是1到 9的数字, Δ是'+'或者'*'。

现在要求你在这个表达式中加一对括号,使得这个式子的值最大。

样例解释:3 + 5 * (7 + 8) * 4 = 303。


Input
单组测试数据。第一给出表达式s(1 ≤ |s| ≤ 5001, |s| 是奇数),它的奇数位是1到9的数字字符,偶数位是'+'或'*'。'*'的数目不超过15。
Output
输出最大的值。
Input示例
3+5*7+8*4
Output示例
303

一开始想用C++暴力,结果发现添括号的位置是在任意两端,然后添括号的位置只可能在*两边,而*号有最多只有15个,从这个角度暴力。

最后,想起来python有一个eval函数,用python直接搞。

代码:

s=str(raw_input())arr=[0,len(s)+1]for i in range(0,len(s)):    if(s[i]=='*'):        arr.append(i)arr.sort();minx=0for k1 in range(0,len(arr)):    if(arr[k1]==0):        test='('    else:        test=s[0:arr[k1]+1]+'('    for k2 in range(k1+1,len(arr)):        tt=test        if(arr[k1]==0):            tt=tt+s[arr[k1]:arr[k2]]+')'+s[arr[k2]:len(s)]        else:            tt=tt+s[arr[k1]+1:arr[k2]]+')'+s[arr[k2]:len(s)]        exec("a="+tt)        if(a>minx):            minx=a;        #print k1,k2        #print tt        print minx


0 0