86求调
查看原帖
86求调
758636
Time_Flyer楼主2024/11/25 19:51

wa的点自己下测试点测试的是对的,洛谷上交有问题

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
int num[15][15],dp[15][15][15];
signed main(){
	cin>>n;
	int x,y,cnt;
	while(cin>>x>>y>>cnt){
		if(x==0&&y==0&&cnt==0) break;
		num[x][y]=cnt;
	} 
	dp[1][1][1]=num[1][1];
	for(int i=2;i<=2*n-1;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=n;k++){
				int z1,z2,z3,z4;
				if(i-j<0||i-k<0) continue;
				if(i-j>=1&&i-k>=1) z1=dp[i-1][j][k];
				if(i-j>=0&&i-k>=0) z2=dp[i-1][j-1][k-1];
				if(i-j>=1&&i-k>=0) z3=dp[i-1][j][k-1];
				if(i-j>=0&&i-k>=1) z4=dp[i-1][j-1][k];
				dp[i][j][k]=max(max(z1,z2),max(z3,z4))+num[i+1-j][j];
				if(j!=k) dp[i][j][k]+=num[i+1-k][k];
			}
		}
	}
	cout<<dp[2*n-1][n][n];
	return 0;
}

附测试点:
输入:
9
1 2 10
1 3 7
1 4 4
3 4 3
4 3 6
5 1 5
5 3 7
5 5 3
0 0 0
输出:
40

2024/11/25 19:51
加载中...