44分玄关求助 3维Dp
查看原帖
44分玄关求助 3维Dp
1286488
Xuan3579楼主2024/11/24 23:27
#include<bits/stdc++.h>
using namespace std;

#define ll long long

const int N = 10;

int a[N][N], n, f[N][N][N][N];

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

int main(){
	n = read();
	while(1){
		int u, v, w;
		u = read(); v = read(); w = read();
		a[u][v] = w;
		if(w == 0)break;
	}
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			for(int x = 1; x <= min(n, i + j - 1); x++){
				if(i + j - x > n)continue;
				f[i][j][x][i + j - x] = max(f[i - 1][j][x - 1][i + j - x], f[i][j - 1][x][i + j - x - 1]);
				f[i][j][x][i + j - x] = max(f[i - 1][j][x][i + j - x - 1], f[i][j - 1][x - 1][i + j - x]);
				f[i][j][x][i + j - x] += a[i][j];
				if(i != x)f[i][j][x][i + j - x] += a[x][i + j - x];
			}
		}
	}
	cout << f[n][n][n][n];
	return 0;
}
2024/11/24 23:27
加载中...