题目链接:https://vjudge.net/problem/HDU-5938
题意:输入一个字符串,从左到右依次插入+-×/,求所得的算式的最大值。
题解:算式一定是a+b-c*d/e的形式,c和d只分配一个数,a+b最大的情况只有两种,然后从前向后枚举e的值。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
char s[25];
int main()
{
int T;
scanf("%d",&T);
int cas=1;
while(T--)
{
scanf("%s",s);
int l=strlen(s);
ll ans=-1000000;
for(int i=2;i<l-2;i++)
{
ll a,b,c,d,e;
a=0;
b=0;
for(int j=0;j<i-1;j++)
{
a=a*10+s[j]-'0';
}
for(int j=1;j<i;j++)
{
b=b*10+s[j]-'0';
}
b+=s[0]-'0';
a+=s[i-1]-'0';
c=s[i]-'0';
d=s[i+1]-'0';
e=0;
for(int j=i+2;j<l;j++)
{
e=e*10+s[j]-'0';
}
ans=max(ans,max(a,b)-(c*d)/e);
}
printf("Case #%d: %lld\n",cas++,ans);
}
return 0;
}