求助!!!很急!!
  • 板块灌水区
  • 楼主Little_Lily
  • 当前回复16
  • 已保存回复16
  • 发布时间2022/2/13 19:19
  • 上次更新2023/10/28 08:38:08
查看原帖
求助!!!很急!!
359252
Little_Lily楼主2022/2/13 19:19

p7074 方格取数

#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long//十年oi一场空,不开 longlong见祖宗 
using namespace std;
ll f[100010][100010][5];//设f[i][j][1]表示从上面走过来,f[i][j][2]表示从左面走过来,设f[i][j][3]表示从下面走过来
ll a[100010][100010];
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>a[i][j];
		}
	}
	for(int i=2;i<=n;i++){
		f[0][i][4]=f[0][i-1][4]+a[0][i];//f数组必须要赋初值
	}
	for(int i=2;i<=n;i++){
		f[i][1][1]=f[i-1][1][1]+a[i][1];//由于第一列只能从上面转移过来,所以提前初始化 
	}
	for(int i=2;i<=m;i++){
		for(int j=1;j<=n;j++){
			f[i][j][2]=max(f[i][j][2],max(f[i][j-1][1],max(f[i][j-1][2],f[i][j-1][3]))+a[i][j]);//从左边走过来的话上一步怎么走都可以 
		}
		for(int j=2;j<=n;j++){
			f[i][j][1]=max(f[i][j][1],max(f[i-1][j][2],f[i-1][j][1])+a[i][j]);//从上面走过来的话不能上一步从下面走过来,不然就重复了 
		}
		for(int j=n-1;j>=1;j--){
			f[i][j][3]=max(f[i][j][3],max(f[i+1][j][2],f[i+1][j][3])+a[i][j]);//从下面走过来原因同上 
		}
	}
	cout<<max(f[n][m][1],f[n][m][2]);//最后答案只可能从左面或上面走过来 
	return 0;
}

运行时错误,求调!

2022/2/13 19:19
加载中...