二维dp 72分
查看原帖
二维dp 72分
1075989
BlauAnthony楼主2024/12/13 18:09

我看到评论区也有二维dp72分的,不知道是什么问题

“花是什么颜色的?” “有黄的,还有红的”

死亡回放: https://www.luogu.com.cn/record/list?pid=P1004&user=1075989

代码:

//洛谷P1004.cpp 
#include<iostream>
#include<string.h>
#include<vector>
using namespace std;
struct xyd{
    int dx,dy,data;
};
int main()
{
	int n;
	cin>>n;
	xyd tmp;tmp.dx=0;tmp.dy=0;tmp.data=0;
	vector<vector<int>> map(n+1,vector<int>(n+1,0));
	vector<vector<xyd>> dp(n+1,vector<xyd>(n+1,tmp)); 
	int one,two,three;
	while(true){
		cin>>one>>two>>three;
		if(one==0&&two==0&&three==0)break;
		map[one][two]=three;
		dp[one][two].data=three;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(dp[i-1][j].data>=dp[i][j-1].data){
				dp[i][j].data+=dp[i-1][j].data;
				dp[i][j].dx=i-1;
				dp[i][j].dy=j;
			}else{
				dp[i][j].data+=dp[i][j-1].data;
				dp[i][j].dx=i;
				dp[i][j].dy=j-1;
			}
		}
	}
	int result=dp[n][n].data;
	int tmpx=n,tmpy=n,ttmpx;
	while(tmpx&&tmpy){
		map[tmpx][tmpy]=0;
		ttmpx=tmpx;
		tmpx=dp[tmpx][tmpy].dx;
		tmpy=dp[ttmpx][tmpy].dy;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			map[i][j]+=max(map[i-1][j],map[i][j-1]);
		}
	}
	cout<<result+map[n][n];
	return 0;
}

就是依托,但是自认为逻辑应该没问题

2024/12/13 18:09
加载中...