玄学CE求大佬
查看原帖
玄学CE求大佬
827648
panda888楼主2024/10/23 11:47

本地测试良好

提交出现CE (已尝试所有版本)

luogu IDE :

Nothing is compiled: OUTPUT exceeds.

求大佬解答

CodeCode

#include<bits/stdc++.h>
using namespace std;
template<size_t _K=4>
class BigNum{
	private:
		int K=4;
		int base=pow(10,K);
		void __change_size(bool _Tp=0){
			if(!_Tp){
				while(c[c[0]+1])
					c[0]++;
			}
		}
	public:
		int c[1005]={};
	BigNum()=default;
	BigNum(int x){
		c[0]=0;
		while(x){
			c[++c[0]]=x%base;
			x/=base;
		}
	}
	BigNum(string x){
		reverse(x.begin(),x.end());
		int k=1;
		c[0]=(x.size()+K-1)/K;
		int t=0;
		for(int i=0;i<x.size();i++,k*=10){
			if(i%K==0)
				k=1,t++;
			c[t]+=(x[i]-'0')*k;
		}
	}
	int size()const{
		return c[0];
	}
	bool empty()const{
		return c[0]==0;
	}
	BigNum operator+(const BigNum& A){
		BigNum tmp(0);
		auto &a=tmp.c;
		auto &b=A.c;
		a[0]=c[0];
		for(int i=1;i<=max(b[0],c[0]);i++){
			a[i]+=b[i]+c[i];
			if(a[i]>=base)
				a[i]-=base,a[i+1]++;
		}
		tmp.__change_size();
		return tmp;
	}
	BigNum operator*(int &A){
		if(A==0) return BigNum(0);
		if(this->empty()) return BigNum(0);
		BigNum tmp(0);
		auto& a=tmp.c;
		for(int i=1;i<=c[0]+5;i++){
			a[i]+=c[i]*A;
			a[i+1]+=a[i]/base;
			a[i]%=base;
		}
		tmp.__change_size();
		return tmp;
	}
	BigNum operator*(int &&A){
		if(A==0) return BigNum(0);
		if(this->empty()) return BigNum(0);
		BigNum tmp(0);
		auto& a=tmp.c;
		for(int i=1;i<=c[0]+5;i++){
			a[i]+=c[i]*A;
			a[i+1]+=a[i]/base;
			a[i]%=base;
		}
		tmp.__change_size();
		return tmp;
	}
	void print(){
		if(this->empty())
			putchar('0');
		else{
			printf("%d",c[c[0]]);
			for(int i=c[0]-1;i>0;i--)
				printf("%0*d",K,c[i]);
		}
	}
};
typedef BigNum<4> BigInt;
template<size_t _K>
bool operator < (const BigNum<_K>& A,const BigNum<_K>& B){
	if(B.size()!=A.size())
		return (A.size())<(B.size());
	for(int i=A.size();i>=1;i--)
		if(A.c[i]!=B.c[i])
			return A.c[i]<B.c[i];
	return 0;
}
int a[85][85];
BigInt f[85];
BigInt dp[85][85];
int main(){
	int n,m;
	cin>>n>>m;
	f[0]=1;
	for(int i=1;i<=m;i++)
		f[i]=f[i-1]*2;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>a[i][j];
	BigInt ans=0;
	for(int i=1;i<=n;i++){
		for(int l=1;l<=m;l++)
			for(int r=1;r<=m;r++)
				dp[l][r]=0;
		for(int len=1;len<=m;len++){
			for(int l=1;l<=m&&l+len-1<=m;l++){
				int r=l+len-1;
				BigInt k=f[m-(r-l)];
				dp[l][r]=max(dp[l+1][r]+k*a[i][l],dp[l][r-1]+k*a[i][r]);
			}
		}
		ans=ans+dp[1][m];
	}
	ans.print();
}
2024/10/23 11:47
加载中...