我高精度到底错哪里了???计算总是不对
查看原帖
我高精度到底错哪里了???计算总是不对
575698
262620zzj楼主2023/4/9 11:34
#include<bits/stdc++.h>
using namespace std;
const int N=100;
struct big{
	int len,a[2000];
	void write(){
		for(int i=len;i;i--)printf("%d",a[i]);
		printf(" ");
	}
	void fix(){
		for(int i=1;i<len;i++){
			a[i+1]+=a[i]/10;
			a[i]%=10;
		}
		while(a[len]>9){
			a[len+1]+=a[len]/10;
			a[len++]%=10;
		}
	}
	void fz(int b){
		len=0;
		memset(a,0,sizeof(a));
		while(b){
			len++;
			a[len]=b%10;
			b/=10;
		}
		if(len==0)len=1;
	}
}dp[N][N],ans,coef,maxinum;
big operator * (const big &a,const int &b){
		big c;
		c.len=a.len;
		for(int i=1;i<=c.len;i++)c.a[i]=a.a[i]*b;
		c.fix();
		return c;
	}
big operator + (const big &a,const big &b){
		big c;
		c.len=max(a.len,b.len);
		for(int i=1;i<=c.len;i++)c.a[i]=a.a[i]+b.a[i];
		c.fix();
		return c;
	}
big Max(const big &a,const big &b){
	if(a.len>b.len)return a;
	if(a.len<b.len)return b;
	for(int i=a.len;i;i--){
		if(a.a[i]>b.a[i])return a;
		if(a.a[i]<b.a[i])return b;
	}
	return a;
}
int n,m,a[N];
int main(){
	scanf("%d%d",&n,&m);
	while(n){
		n--;
		for(int i=1;i<=m;i++)scanf("%d",a+i);
		for(int i=0;i<=m;i++){
			for(int j=1;j<=m+1;j++){
				dp[i][j].fz(0);
			}
		}
		coef.fz(1);
		for(int len=m-1;len;len--){
			coef=coef*2;
			for(int i=1,j=i+len-1;j<=m;i++,j++){
				dp[i][j]=Max(dp[i-1][j]+coef*a[i-1],dp[i][j]);
				if(i==3&&j==3)dp[i][j].write();
				dp[i][j]=Max(dp[i][j+1]+coef*a[j+1],dp[i][j]);
			}
		}
		maxinum.len=-114514;
		for(int i=1;i<=n;i++)maxinum=Max(maxinum,dp[i][i]+coef*2*a[i]);
		ans=ans+maxinum;
	}
	ans.write();
	return 0;
}
2023/4/9 11:34
加载中...