dp int128 70pts玄关求调
查看原帖
dp int128 70pts玄关求调
590675
A1ex_5yn7ax楼主2025/1/13 17:49
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[81][81];
__int128 dp[81][81],ans,cf2[81]={1};
#define int __int128
inline void read(int &n){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-') f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    n=x*f;
}
inline void print(int n){
    if(n<0){
        putchar('-');
        n*=-1;
    }
    if(n>9) print(n/10);
    putchar(n % 10 + '0');
}
#undef int
int main(){
    cin>>n>>m;
    for(int i=1;i<=63;i++) cf2[i]=(__int128)cf2[i-1]*__int128(2);
    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++){
		dp[2][m]=(__int128)2*(__int128)a[i][1],dp[1][m-1]=(__int128)2*(__int128)a[i][m];
		__int128 maxn=0;
		for(int st=m-3;st>=0;st--){
			for(int j=1;j+st<=m;j++){
				if(j+st+1<=m&&j-1>=1) dp[j][j+st]=max((__int128)dp[j][j+st+1]+(__int128)(a[i][j+st+1]*cf2[m-st-1]),(__int128)dp[j-1][j+st]+(__int128)(a[i][j-1]*cf2[m-st-1]));
				else if(j+st+1<=m) dp[j][j+st]=(__int128)dp[j][j+st+1]+(__int128)(a[i][j+st+1]*cf2[m-st-1]);
				else if(j-1>=1) dp[j][j+st]=(__int128)dp[j-1][j+st]+(__int128)(a[i][j-1]*cf2[m-st-1]);
				maxn=max(__int128(maxn),(__int128)dp[j][j+st]);
			}
		
		} 
		for(int j=1;j<=m;j++) maxn=max(__int128(maxn),(__int128)dp[j][j]+(__int128)(a[i][j]*cf2[m]));
		ans=(__int128)maxn+(__int128)ans;
	}
	print((__int128)ans);
    return 0;
}

求调qwq

2025/1/13 17:49
加载中...