/*
推荐题型:四星,原来不会做!
最大int型问题,总感觉这类问题中用到了一些估算。因为有些步骤想不清楚
状态d[i]表示,到i为止,所组成的最大整数
状态转移方程为:d[i]=max{d[k]+sum(k+1,i) | k<i}
注意:如果用到了不常用的数类型,如:long long,很容易会有遗漏,要多注意。
*/
//#define TEST
#include <cstdio>
#include <cstring>
const int nMax=207,INF=0x7fffffff;
long long d[nMax];
char s[nMax];
int len;
void init()
{
gets(s);
len=strlen(s);
}
long long sum(int l,int r)
{
long long z=0;
for(int i=l;i<=r;i++)
z=z*10+s[i]-'0';
return z;
}
void solve()
{
bool flag=0;
memset(d,0,sizeof(d));
for(int i=0;i<len;i++)
{
if(!flag && sum(0,i)<INF)
d[i]=sum(0,i);
else
{
flag=1;
for(int k=i-1;k>=0;k--)
{
long long temp=sum(k+1,i);
if(temp>INF) break;
if(d[i]<d[k]+temp)
{
d[i]=d[k]+temp;
#ifdef TEST
printf("k=%d d[k]=%lld temp=%lld\n",k,d[k],temp);
#endif
}
}
}
#ifdef TEST
printf("%d %d\n",i,d[i]);
#endif
}
}
int main()
{
freopen("f://data.in","r",stdin);
int T;
scanf("%d",&T);
getchar();
while(T--)
{
init();
solve();
printf("%lld\n",d[len-1]);
}
}
11258 String Partition(最大int型)
最新推荐文章于 2021-02-07 18:26:22 发布