讨论 / 标准程序(DP+运算符重载式高精)
hehaoqian 2011-11-04 23:02:00
点我顶贴 收藏 删除
#include <iostream>

#include <string.h>

#include <algorithm>

using namespace std;

struct bigint{

unsigned int last;

unsigned int u[81];

bigint(){

last=0;

memset(u,0,sizeof(u));

}

bigint operator+(const bigint &a){

int l=max(last,a.last),i;

bigint m;

for(i=0;i<=l;i++){

m.u[i]+=u[i]+a.u[i];

m.u[i+1]+=m.u[i]/10;

m.u[i]%=10;

}

if(m.u[l+1]!=0)m.last=l+1;

else m.last=l;

return m;

}

bool operator>(const bigint &a){

if(last>a.last)return true;

if(last<a.last)return false;

int i;

for(i=last;i>=0;i--){

if(u[i]>a.u[i])return true;

if(u[i]<a.u[i])return false;

}

return false;

}

friend ostream& operator<<(ostream &os,bigint a){

int i;

for(i=a.last;i>=0;i--)

os<<a.u[i];

return os;

}

friend istream& operator>>(istream &is,bigint &a){

int i,l;char b[82];

is>>b;

memset(a.u,0,sizeof(a.u));//一定要memset 否则会悲剧

l=strlen(b)-1;

a.last=l;

for(i=0;i<=l;i++)

a.u[l-i]=b[i]-'0';

return is;

}

bool empty(){

if(last==0&&u[0]==0)return true;

else return false;

}

};

bigint a[81],f[81][81];

int n,m;

bigint ans;

bigint getans(int s,int t){

if(!f[s][t].empty())return f[s][t];

if(s==t)return f[s][s]=a[s]+a[s];

bigint t1,t2;

t1=getans(s+1,t)+a[s];

t2=getans(s,t-1)+a[t];

if(t1>t2)return f[s][t]=t1+t1;

else return f[s][t]=t2+t2;

}

int main(){

int i,j;

bigint temp;

cin>>n>>m;

for(i=1;i<=n;i++){

memset(f,0,sizeof(f));

for(j=1;j<=m;j++)

cin>>a[j];

temp=getans(1,m);

ans=ans+temp;

}

cout<<ans;

return 0;

}

#1 Getchar@2011-11-04 23:02:00
回复 删除
围观sb

#2 Getchar@2011-11-04 23:02:00
回复 删除
楼主通过率亮了
查看更多回复
提交回复