0pts求助
查看原帖
0pts求助
316827
Temperature_automata楼主2020/11/25 12:54
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int n , m , Map[1005][1005] ;
int f[1005][1005][2] ;
int sum[1005][1005] , dis[1005][1005] ;

int main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
  memset(f,0xc0,sizeof(f)) ;
  cin >> n >> m ;
  for ( int i = 1 ; i <= n ; i++) {
  		for(int j = 1 ; j <= m ; j ++) {
  			cin >> Map[i][j] ;
			} 
	}
	for ( int i = 1 ; i <= n ; i ++ ) {
		for ( int j = 1 ; j <= m ; j ++ ) {
			sum[i][j] = sum[i][j-1] + Map[i][j] ;
		}
		for ( int j = m ; j >= 1 ; j -- ) {
			dis[i][j] = dis[i][j+1] + Map[i][j] ;
		}
	}
	f[1][1][1] = Map[1][1] ;
	f[1][1][0] = Map[1][1] ;
	for ( int i = 2 ; i <= m ; i ++) {
		f[1][i][1] = f[1][i][0] = f[1][i-1][1]+Map[1][i] ;
	}
	for ( int i = 2 ; i <= n + 1 ; i ++ ) {
		for ( int j = 1 ; j <= m ; j ++ ) {
	 	  for ( int k = 1 ; k < j ; k ++ ) {
	 	  	f[i][j][1] = max ( sum[i-1][j]-sum[i-1][k-1] + max(f[i-1][k][0],f[i-1][k][1]) , f[i][j][1] );
	    }
	    for ( int k = j + 1 ; k <= m ; k ++ )
	    {
	    	f[i][j][0] = max ( dis[i-1][k]-dis[i-1][j-1]+max(f[i-1][k][1],f[i-1][k][0]),f[i][j][0]);
			}
		} 
	} 
	cout << max(f[n+1][m][1],f[n+1][m][0]) ;
	return 0;
}

样例过了,0分,许多hack数据也没过,求原因

2020/11/25 12:54
加载中...