60分求助
查看原帖
60分求助
370577
BigBen2020楼主2022/10/28 19:53
//思路,搜索每一列从一处到另一处的路径长
//即所包含的所有之和
//样例12213
//动态数组,否则会M
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 1e3 + 10;
ll a[MAXN][MAXN];
ll b[MAXN][MAXN];
ll c[MAXN];
//来自上
ll d[MAXN];
//来自下
ll m,n;
int main(){
    scanf("%d%d",&n,&m);
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=m;j++){
            scanf("%d",&a[i][j]);
            b[i][j] = -1e17;
        }
    }
    //memset(b,0xc0,sizeof(b));
    //printf("%d",b[0][0]);
    b[0][1] = 0;
    for(int i = 1;i<=n;i++){
        b[i][1] = a[i][1] + b[i-1][1];
        //printf("%d ",b[i][1]);
    }
    for(int i = 2;i<=m;i++){
        c[0] = 0;
        for(int j = 1;j<=n;j++){
            c[j] = max(b[j][i-1],c[j-1]) + a[j][i];
        }
        memset(d,0xc0,sizeof(d));
        d[n+1] = 0;
        for(int j = n;j>=1;j--){
            d[j] = max(b[j][i-1],d[j+1]) + a[j][i];
        }
        for(int j = 1;j<=n;j++){
            b[j][i] = max(c[j],d[j]);
            printf("b[%d][%d]=%d=max(%d,%d)\n",j,i,b[j][i],c[j],d[j]);
        }
    }
    /*for(int i = 2;i<=m;i++){
		for(int j = 1;j<=n;j++){
			printf("%d ",b[j][i]);
		}
		printf("\n");
	}*/
    printf("%d",b[n][m]);
    return 0;
}

样例2不过,60分,输出-5>-2 怎么办

2022/10/28 19:53
加载中...