插入加号

来源:互联网 发布:mac app store 验证码 编辑:程序博客网 时间:2024/04/28 13:38
 
最大和
Time Limit:2000MS  Memory Limit:65536K
Total Submit:48 Accepted:11
Description
给你一串数,再给你几个加号插入这串数中,求使和最大的方案。
如给你594,再给你一个加号,易得最优方案为5+94=99。
Input
第一行为这一串长数,长度l<=400。
第二行为一个整数k,代表加号的个数,k<=400。
Output
一个数,为最优解。
Sample Input
594
1
Sample Output
99
Source
 
#include<iostream>
#include<string>
using namespace std;
string clear(string s)
{
 if(s=="")
 s="0";
 
 while(s.length()>0 && s[0]=='0')
  s.erase(0,1);
 
 if(s=="") 
  s="0";
 return s;
}
bool bigger(string s1,string s2)
{
 bool bigger=true;
 if(s1.length()>s2.length())
  bigger=true;
 else if(s1.length()==s2.length() && s1>s2)
  bigger=true;
 else bigger=false;
 return bigger;
}
string addition(string s1,string s2)
{
 int i;
 while(s1.length()<s2.length())
  s1="0"+s1;
 while(s1.length()>s2.length())
  s2="0"+s2;
 s1="0"+s1;
 s2="0"+s2;
   for(i=s1.length()-1;i>=0;i--)
 {
  s1[i]+=s2[i]-'0';
  if(s1[i]>'9')
  {
   s1[i]-=10;
   s1[i-1]+=1;
  }
 }
 return clear(s1);
}
string front(string s,int k)
{
 int i;
 string sum;
 string sx;
 for(i=0;i<k;i++)
 { 
  sx=s[i];
  sum=addition(sum,sx);
 }
 sum=addition(sum,s.substr(i));
 //cout<<"front="<<sum<<endl;
 return sum;
}
string mid(string s,int k)
{
 int i;
 string sum;
 string sumx="0";
 string str;
 string sx,sy;
 string max;
 int j;
 for(i=0;i<k;i++)
 { 
  sx=s[i];
  sumx=addition(sumx,sx);
  sum=sumx;
  str="0";
  for(j=0;j<k-i-1;j++)
  {
   sy=s[s.length()-1-j];
   sum=addition(sum,sy);
  }
  str=s.substr(i+1,s.length()-k);
  sum=addition(sum,str);
 
  if(bigger(sum,max)) max=sum;
  else continue;
 }
 //cout<<"max="<<max<<endl;
 return max;
}
string back(string s,int k)
{
 int i;
 string sum;
 string sx;
 for(i=s.length()-1;i>s.length()-1-k;i--)
 {
  sx=s[i];
  sum=addition(sum,sx);
 }
 sum=addition(sum,s.substr(0,s.length()-k));
 //cout<<"back="<<sum<<endl;
 return sum;
}
string Max(string s,int k)
{
 string f,b,m;
 f=front(s,k);
 b=back(s,k);
 m=mid(s,k);
 if(bigger(f,b))
 {
  if(bigger(f,m)) return f;
  else return m;
 }
 else{
  if(bigger(b,m)) return b;
  else return m;
 }
}
int main()
{
    string a;
 int i,k;
 string max;
    cin>>a;
 cin>>k;
 max=Max(a,k);
 
 cout<<max<<endl;
    return 0;
}