蒟蒻的一维数组解法

wangruichen 2022-05-04 21:03:45 17 返回题目

#include<ios>
#define int unsigned int
inline int read(){
	char c(getchar());
	int x(0);
	while(!isdigit(c))c=getchar();
	for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+(c^48);
	return x;
}
int f[2501],a[10001];
char n=read(),m=read();
inline int max(int a,int b,int c,int d){return std::max(std::max(a,b),std::max(c,d));}
main(){
	for(char i=1;i<=n;i++)
		for(char j=1;j<=m;j++)
			a[i*100+j]=read();
	for(char i=3;i<=n+m;i++)
		for(char j=n;j>0;j--)
			for(char k=n;k>j;k--)
				f[j*50+k]=max(f[j*50+k],f[(j-1)*50+k-1],f[(j-1)*50+k],f[j*50+k-1])+a[j*100+i-j]+a[k*100+i-k];
	printf("%d",f[(n-1)*50+n]);
}
{{ vote && vote.total.up }}