萌新刚学 OI,心态彻底崩塌,求助样例都过不了的代码/kk
查看原帖
萌新刚学 OI,心态彻底崩塌,求助样例都过不了的代码/kk
298549
SIXIANG32楼主2021/1/30 20:57
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
string add(string s1,string s2)
{
	string ans="";
	if(s2.size()<s1.size())while(s2.size()!=s1.size())s2="0"+s2;
	if(s1.size()<s2.size())while(s1.size()!=s2.size())s1="0"+s1;
	int a=0,b=0,c=0;
	for(int p=s2.size()-1;p>=0;p--)
	{
		a=s1[p]-'0',b=s2[p]-'0';
		ans=char(((a+b+c)%10)+'0')+ans;
		c=(a+b+c)/10;
	}
	if(c==1)ans="1"+ans;
	return ans;
}
int a[4100],b[4100],c[4100];
string mul(string s1,string s2)
{
	memset(a,0,sizeof(a)),memset(b,0,sizeof(b)),memset(c,0,sizeof(c));
	if(s1=="0"||s2=="0")return "0";
	for(int p=1;p<=s1.size();p++)a[p]=int(s1[s1.size()-p]-'0');
	for(int p=1;p<=s2.size();p++)b[p]=int(s2[s2.size()-p]-'0');
	for(int p=1;p<=s2.size();p++)
		for(int i=1;i<=s1.size();i++)
			c[p+i-1]+=a[i]*b[p];
	int len=s1.size()+s2.size();
	for(int p=1;p<len;p++)
		if(c[p]>9)
			c[p+1]+=(c[p]/10),c[p]%=10;
	while(len&&!c[len])len--;
	string ans=""; 
	for(int p=len;p>=1;p--)
		ans=ans+char(c[p]+'0');
	return ans;
}
string max(string x,string y)
{
	int lx=x.size(),ly=y.size();
	if(lx>ly)return x;
	else if(ly>lx)return y;
	else
	{
		for(int p=0;p<lx;p++)
			if(x[p]>y[p])return x;
			else return y;
	}
}
string A[110][110],f[110][110];
int main()
{
	int n,m;
	string ans="0";
	cin>>n>>m;
	for(int p=1;p<=n;p++)
		for(int i=1;i<=m;i++)
			cin>>A[p][i];
	for(int p=1;p<=n;p++)
	{
		for(int i=1;i<=m;i++)
			for(int j=1;j<=m;j++)
				f[i][j]="0";
		for(int len=0;len<=m;len++)
            for(int i=1;i+len<=m;i++)
                f[i][i+len]=max(add(mul("2",f[i+1][i+len]),mul("2",A[p][i])),add(mul("2",f[i][i+len-1]),mul("2",A[p][i+len])));
		ans=add(ans,f[1][m]);
	}
	cout<<ans<<endl;
}
2021/1/30 20:57
加载中...