蒟蒻求解,为什么第一个样例过不去
查看原帖
蒟蒻求解,为什么第一个样例过不去
1259205
kaoxiangnb666楼主2024/7/11 21:04
#include<bits/stdc++.h>
using namespace std;
const int N=30;

int f[N][N][N];//存储路径所在坐标 
int w[N][N];//存数 
int n;//与题义同 

int main(){
	
    cin>>n;
    int a,b,c;
    while(cin>>a>>b>>c,a||b||c){
        w[a][b]=c;
    }//输入
	 
    for(int k=2;k<=n+n;k++){//k是两点坐标之和,优化,将四维数组转化为三位数组 
        for(int i1=1;i1<=n;i1++){//i1是第一条路径坐标 
            for(int i2=1;i2<=n;i2++){//i2是第二条路径坐标 
                int j1=k-i1;
                int j2=k-i2;//w[i1][i2]为第一次路径坐标数,w[i2][j2]为第二次路径坐标数 
                if(j1>=1&&j1<=n&&j2>=1&&j2<=n){//判断是否出界 
                    int t=w[i1][j1];
                    if(i1!=i2){
                        t+=w[i2][j2];//判断是否在同一个点,如果是就加上这个点数,不是就加上两个点数  
                    }
                    f[k][i1][i2]=max(f[k][i1][i2],f[k-1][i1-1][i2-1]+t);
                    f[k][i1][i2]=max(f[k][i1][i2],f[k-1][i1-1][i2]+t);
                    f[k][i1][i2]=max(f[k][i1][i2],f[k-1][i1][i2-1]+t);
                    f[k][i1][i2]=max(f[k][i1][i2],f[k-1][i1][i2]);//dp 
                }
            }
        }
    }
    cout<<f[n+n][n][n];//输出总数 
    return 0;
}

必将感激不尽

2024/7/11 21:04
加载中...