http://acm.hdu.edu.cn/showproblem.php?pid=5938
给出一串1-9组成的数,将+-*/四个符号按顺序插入这串数中,求最大值.
贪心,观察可以得到,-号左边为正右边为负,只要枚举减号的位置,将左边尽量大,右边尽量小,就可以得到最大结果了.
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
int cs=1;
char a[1111];
cin>>t;
while(t--)
{
scanf("%s",a);
int n=strlen(a);
long long int ans=-11111111111;
for(int i=2;i<n-2;i++)
{
long long int aa=0;
for(int j=0;j<i-1;j++)
{
aa=aa*10+a[j]-'0';
}
long long int b=a[i-1]-'0';
long long int s1=aa+b;
aa=0;b=0;
for(int j=1;j<i;j++)
{
aa=aa*10+a[j]-'0';
}
b=a[0]-'0';
long long int s2=aa+b;
long long int c=a[i]-'0';
long long int d=a[i+1]-'0';
long long int e=0;
for(int j=i+2;j<n;j++)
{
e=e*10+a[j]-'0';
}
ans=max(ans,max(s1,s2)-c*d/e);
}
cout<<"Case #"<<cs++<<": "<<ans<<endl;
}
}