codeforces 552E Vanya and Brackets(暴力)
2015-07-19 20:44
267 查看
题目链接:http://codeforces.com/contest/552/problem/E
题意:
给出一串式子,添加一队小括号,使得最终值最大,并输出最大值,式子里只包含1~9这9个数
解题思路:
括号可以添加在任意位置,然而‘(’放在‘+’前面以及‘)’放在‘+’前面是没有意义的,数值不会变
所以‘(’放‘*’后面,‘)’放‘*’前面
式子最长就只有5000,乘号最多就只有15个,所以不用考虑超时问题
用数组记录‘*’前面一个数的位置,以及‘*’后面一个数的位置
括号的位置一个一个假设过去
题意:
给出一串式子,添加一队小括号,使得最终值最大,并输出最大值,式子里只包含1~9这9个数
解题思路:
括号可以添加在任意位置,然而‘(’放在‘+’前面以及‘)’放在‘+’前面是没有意义的,数值不会变
所以‘(’放‘*’后面,‘)’放‘*’前面
式子最长就只有5000,乘号最多就只有15个,所以不用考虑超时问题
用数组记录‘*’前面一个数的位置,以及‘*’后面一个数的位置
括号的位置一个一个假设过去
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <string> #include <stack> using namespace std; #define ll __int64 char str[5005]; int a[50]; int len; ll init(int l,int r) { ll tmp=1; ll ans=0; for(int i=l;i<=r;i++) { if(isdigit(str[i])) { tmp*=(ll)str[i]-'0'; } if(str[i]=='+') { ans+=tmp; tmp=1; } } ans+=tmp; tmp=1; ll sum=0; for(int i=1;i<=len;i++) { if(i==l) { tmp*=ans; i=r; } else { if(isdigit(str[i])) { tmp*=(ll)str[i]-'0'; } if(str[i]=='+') { sum+=tmp; tmp=1; } } } sum+=tmp; return sum; } int main() { scanf("%s",str+1); len = strlen(str+1); memset(a,0,sizeof(a)); int l = 1; a[l]=1; for(int i=1;i<=len;i++) { if(str[i]=='*') { l++; a[l] = i-1; l++; a[l] = i+1; } } if(a[l]!=len) { l++; a[l] = len; } ll sum=0; for(int i=1;i<=l;i++) { for(int j=i;j<=l;j++) { sum = max(sum,(ll)init(a[i],a[j])); } } printf("%I64d\n",sum); return 0; }
相关文章推荐
- 并查集
- pygame初步(一)绘制一个运动的矩形
- PL/SQL(x64)借助Oracle Instant Client连接Oracle配置教程
- 垃圾收集基础
- leetcode 110 Balanced Binary Tree
- 正则表达式
- leetcode 110 Balanced Binary Tree
- WebService笔记(第二弹:使用JAX-WS开发WebService)
- NOI2015 day1 prog 程序自动分析(并查集)
- 三次握手和四次挥手的小结
- 是机会而不是威胁
- java web 开发中hibernate常见的基础问题
- AC自动机 - 关于Fail指针
- 键盘事件
- ZOJ 3233
- UI界面 view的常用属性
- FTP服务器无法访问原因
- mybatis使用初步问题解决方案
- Android JSON解析库的使用
- 测试hadoop-1.2.1是否成功安装和配置