P1004

4维dp(因为n<=10)
就是二维dp+判断是否重复取

#include<bits/stdc++.h>
using namespace std;
int dp[15][15][15][15],a[15][15],x,y,z; 
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin>>n;
	while(cin>>x>>y>>z){
		if(x==0)break;
		a[x][y]=z;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int l=1;l<=n;l++){
				for(int r=1;r<=n;r++){
					dp[i][j][l][r]=max(max(dp[i-1][j][l-1][r],dp[i-1][j][l][r-1]),max(dp[i][j-1][l-1][r],dp[i][j-1][l][r-1]))+a[i][j]+a[l][r];
					if(i==l&&r==j)dp[i][j][l][r]-=a[i][j];
				}
			}
		}
	}
}
posted @ 2024-10-09 20:16  yzc_is_SadBee  阅读(4)  评论(0编辑  收藏  举报