72分求助
查看原帖
72分求助
1436254
xingjielongSYH楼主2024/8/30 15:02

记录

#include<bits/stdc++.h>
using namespace std;
int a[10][10];
int dp[10][10];
int point[10][10];
int main(){
	int n,x,y,z;
	cin >> n;
	while(cin >> x >> y >> z,z!=0){
		a[x][y]=z;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(dp[i-1][j]>dp[i][j-1]){
				dp[i][j]=dp[i-1][j];
				point[i][j]=1;
			}else{
				dp[i][j]=dp[i][j-1];
				point[i][j]=2;
			}
			dp[i][j]+=a[i][j];
		}
	}
	int ans=dp[n][n];
	int i=n,j=n;
	while(i>0&&j>0){
		a[i][j]=0;
		if(point[i][j]==1)i--;
		else j--;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
			dp[i][j]+=a[i][j];	
		}
	}
	ans+=dp[n][n];
	cout << ans;
	return 0;
}

使用动态规划+路线储存

2024/8/30 15:02
加载中...