mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-09-11 10:30:00 +00:00
feat: 添加P1004.cpp解决动态规划路径问题
实现动态规划算法解决网格路径最大值问题,包含两次遍历计算最优路径和分数累加
This commit is contained in:
parent
f8f53e255d
commit
a1024cfc8e
68
src/9/6/P1004.cpp
Normal file
68
src/9/6/P1004.cpp
Normal file
@ -0,0 +1,68 @@
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <istream>
|
||||
#include <tuple>
|
||||
#include <vector>
|
||||
using ll = int64_t;
|
||||
|
||||
ll n,x,y,z,ans0;
|
||||
struct DP{
|
||||
ll val;
|
||||
ll x,y;
|
||||
};
|
||||
|
||||
int main(){
|
||||
std::iostream::sync_with_stdio(false);
|
||||
std::cin.tie(nullptr);
|
||||
|
||||
std::cin>>n;
|
||||
std::vector<std::vector<ll>> map(n+1,std::vector<ll>(n+1));
|
||||
std::vector<std::vector<DP>> dp(n+1,std::vector<DP>(n+1));
|
||||
do {
|
||||
std::cin>>x>>y>>z;
|
||||
map[x][y]=z;
|
||||
}while (x|y|z);
|
||||
for(ll i=1;i<=n;i++){
|
||||
for(ll j=1;j<=n;j++){
|
||||
if(dp[i][j].val<dp[i][j-1].val+map[i][j]){
|
||||
dp[i][j].val = dp[i][j-1].val + map[i][j];
|
||||
dp[i][j].x = i;
|
||||
dp[i][j].y = j-1;
|
||||
}
|
||||
if(dp[i][j].val<dp[i-1][j].val+map[i][j]){
|
||||
dp[i][j].val = dp[i-1][j].val + map[i][j];
|
||||
dp[i][j].x = i-1;
|
||||
dp[i][j].y = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
ans0=dp[n][n].val;
|
||||
map[n][n]=0;
|
||||
while(true){
|
||||
static ll nx=dp[n][n].x,ny=dp[n][n].y;
|
||||
if((nx|ny)==0){
|
||||
break;
|
||||
}
|
||||
map[nx][ny]=0;
|
||||
auto[val,x,y] = dp[nx][ny];
|
||||
nx=x,ny=y;
|
||||
}
|
||||
dp.clear();
|
||||
dp.resize(n+1,std::vector<DP>(n+1));
|
||||
for(ll i=1;i<=n;i++){
|
||||
for(ll j=1;j<=n;j++){
|
||||
if(dp[i][j].val<dp[i][j-1].val+map[i][j]){
|
||||
dp[i][j].val = dp[i][j-1].val + map[i][j];
|
||||
dp[i][j].x = i;
|
||||
dp[i][j].y = j-1;
|
||||
}
|
||||
if(dp[i][j].val<dp[i-1][j].val+map[i][j]){
|
||||
dp[i][j].val = dp[i-1][j].val + map[i][j];
|
||||
dp[i][j].x = i-1;
|
||||
dp[i][j].y = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
// std::cout<<dp[n][n].val<<"\n";
|
||||
std::cout<<dp[n][n].val+ans0<<"\n";
|
||||
}
|
Loading…
Reference in New Issue
Block a user