60分求助
查看原帖
60分求助
1032333
Barryb楼主2024/6/30 11:25
#include<bits/stdc++.h> 
using namespace std;
int n,m;
__int128 ans;
__int128 a[100][100];
__int128 dp[100][100];
inline void input(__int128 &s)
{
    s=0;
    char c=' ';
    while(c>'9'||c<'0') c=getchar();
    while(c>='0'&&c<='9')
    {
        s=s*10+c-'0';
        c=getchar();
    }
}
inline void output(__int128 x)
{
    if(x>9)
        output(x/10);
    putchar(x%10+'0');
}
__int128 f(__int128 row[]) 
{
    for(int len=1;len<=m;len++) 
	{
	    for(int i=1;i+len-1<=m;i++) 
		{
	        __int128 j=i+len-1;
	        if(i==j) 
	            dp[i][j]=(1<<m)*row[i];
	        else 
			{
	            __int128 k=m-(j-i);
	            dp[i][j]=max(dp[i+1][j]+(1<<k)*row[i],dp[i][j-1]+(1<<k)*row[j]);
	        }
	    }
	}
    return dp[1][m];
}
signed main() 
{
    cin>>n>>m;
    for(int i=1;i<=n;i++) 
        for(int j=1;j<=m;j++) 
            input(a[i][j]);
    for(int i=1;i<=n;i++)
    	ans+=f(a[i]); 
    output(ans);
    return 0;
}
2024/6/30 11:25
加载中...