11258 String Partition(最大int型)

来源:互联网 发布:司机配货软件 编辑:程序博客网 时间:2024/05/28 15:36
/*推荐题型:四星,原来不会做!最大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 TESTprintf("k=%d d[k]=%lld temp=%lld\n",k,d[k],temp);#endif}}}#ifdef TESTprintf("%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]);}}

原创粉丝点击