我看到评论区也有二维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;
}
就是依托,但是自认为逻辑应该没问题