蒟蒟,求助,大佬,呜呜……
查看原帖
蒟蒟,求助,大佬,呜呜……
721959
__pig__楼主2022/12/2 15:16

60pts(没有高精)

#include<bits/stdc++.h>
using namespace std;
unsigned long long n,m,f[35][35][35],a[35][35],ans;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			f[i][j][j]=a[i][j]*(1<<m);
		}
	}
	for(int k=m-1;k;k-=1){
		for(int i=1;i<=k;i++){
			 int j=i+m-k;
			 for(int l=1;l<=n;l++){
			 	f[l][i][j]=max(f[l][i+1][j]+a[l][i]*(1<<k),f[l][i][j-1]+a[l][j]*(1<<k));
			 }
		}
	}
	for(int i=1;i<=n;i++){
		ans+=f[i][1][m];
	}
	cout<<ans;
}

连样例都过不去的高精

#include<bits/stdc++.h>
using namespace std;
long long n,m;
int f[81][81][81][151],a[85][85][151],ans[151],p[151];
string s;
void add(int c[],int d[],int e[]){//e=c+d
	memset(e,0,sizeof(e));
	int n=max(c[0],d[0]);
	for(int i=1;i<=n;i++){
		e[i]+=c[i]+d[i];
		e[i+1]+=e[i]/10;
		e[i]%=10;
	}
	if(e[n+1])e[0]=n+1;
	else e[0]=n;
}
void two(int c[],int y,int d[]){//d=c*(1<<y)
	memset(d,0,sizeof(d));
	int n=c[0];
	for(int i=0;i<=n;i++)p[i]=c[i];
	y--;
	while(y--){
		for(int i=1;i<=n;i++)d[i]=p[i]<<1;
		for(int i=1;i<=n;i++)d[i+1]+=d[i]/10,d[i]%=10;
		if(d[n+1])n++;
		for(int i=1;i<=n;i++)p[i]=d[i];
	}
	d[0]=n;
}
void ma(int c[],int d[],int e[]){
	memset(e,0,sizeof(e));
	int lc=c[0],ld=d[0];
	bool g;//0:lc 1=ld
	if(lc!=ld)g=lc>ld;
	else{
		for(int i=lc;i;--i){
			if(c[i]!=d[i]){
				g=c[i]>d[i];
				break;
			}
		}
	}
	if(g)for(int i=0;i<=lc;i++)e[i]=c[i];
	else for(int i=0;i<=ld;i++)e[i]=d[i];
}
int main(){
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>s;
			a[i][j][0]=s.size();
			for(int k=1;k<=a[i][j][0];k++)a[i][j][k]=s[a[i][j][0]-k]-'0';
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			two(a[i][j],m,f[i][j][j]);
		}
	}
	for(int k=m-1;k;k--){
		for(int i=1;i<=k;i++){
			int j=i+m-k;
			for(int l=1;l<=n;l++){
				int q[151],qq[151],qa[151],qqa[151];
				two(a[l][i],k,q);
				add(q,f[l][i+1][j],qa);
				two(a[l][j],k,qq);
				add(f[l][i][j-1],qq,qqa);
				ma(qa,qqa,f[l][i][j]);
			}
		}
	}
	for(int i=1;i<=n;i++){
		int q[151];
		add(ans,f[i][1][m],q);
		for(int i=0;i<=q[0];i++)ans[i]=q[i];
	}
	for(int i=ans[0];i;i--)cout<<ans[i];
}
2022/12/2 15:16
加载中...