为什么一个点也过不了??
查看原帖
为什么一个点也过不了??
131890
Eroi楼主2021/11/16 20:24
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define MAXN 2020
#define INF 99999999

using namespace std;

inline int read()
{
	int x=0;
	int f=1;
	char ch=getchar();
	while(ch>'9'||ch<'0'){
		if(ch=='-'){
			f=-f;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=x*10+ch-'0';
		ch=getchar();
	}
	return x*f;
}

int n;
int m;
int map[MAXN][MAXN];
int f[MAXN][MAXN];

int qm(int a,int b){
	int ans=1;
	int base=a;
	while(b){
		if(b&1){
			ans*=base;
		}
		base*=base;
		b>>=1;
	}
	return ans;
}

int dp(int l,int r,int x,int s){
	if(f[l][r]) return f[l][r];
	if(l>r) return 0;
	f[l][r]=max(dp(l+1,r,x,s+1)+map[x][l]*qm(2,s),dp(l,r-1,x,s+1)+map[x][r]*qm(2,s));
	return f[l][r];
}

int main()
{
	n=read();
	m=read();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			map[i][j]=read();
		}
	}
	int ans;
	for(int i=1;i<=n;i++){
		memset(f,0,sizeof(f));
		ans+=dp(1,m,i,1);
	}
	cout<<ans;
	return 0;
 } 
2021/11/16 20:24
加载中...