72分,#3和#6wa,求助
查看原帖
72分,#3和#6wa,求助
1126005
00000000007f楼主2024/10/2 10:01
#include <bits/stdc++.h>
using namespace std;
struct node{
	vector<int>x;
	vector<int>y;
};
int main()
{
    int n,a[105][105]={},dp[105][105]={},ans=0;
    node road[105][105];
	cin>>n;
	while(1){
    	int x,y,num;
    	cin>>x>>y>>num;
    	if(x==0&&y==0&&num==0)break;
    	a[x][y]=num;
	}
	for(int i=n;i>=1;i--)
		for(int j=n;j>=1;j--){
			int x,y;
			if(dp[i+1][j]>=dp[i][j+1])x=i+1,y=j;
			else x=i,y=j+1;
			dp[i][j]=dp[x][y]+a[i][j];
			road[i][j].x=road[x][y].x;
			road[i][j].y=road[x][y].y;
			road[i][j].x.push_back(i);
			road[i][j].y.push_back(j);
		}
	
	ans=dp[1][1];
	memset(dp,0,sizeof(dp));
	for(int i=0;i<road[1][1].x.size();i++){
		a[road[1][1].x[i]][road[1][1].y[i]]=0;
	}
	for(int i=n;i>=1;i--)
		for(int j=n;j>=1;j--)
			dp[i][j]=max(dp[i+1][j],dp[i][j+1])+a[i][j];
	ans+=dp[1][1];
	cout<<ans;
    return 0;
}
2024/10/2 10:01
加载中...