Где я ошибся в этом рекурсивном решении? Для этого существует итеративное решение dp, но я хочу знать свою ошибку здесь. Кто-нибудь, пожалуйста, дайте мне знать!
Дана золотая жила (M) n*m размеров. Каждое месторождение в этом руднике содержит положительное целое число, которое представляет собой количество золота в тоннах. Изначально майнер находится в первом столбце, но может быть и в любой строке. Он может двигаться только (вправо->,вправо вверх /,вправо вниз\), то есть из данной ячейки майнер может двигаться в ячейку по диагонали вверх вправо или вправо или по диагонали вниз вправо. Ваша задача состоит в том, чтобы узнать максимальное количество золота, которое он может собрать.
Вход : M[][] = {{1, 3, 3},
{2, 1, 4},
{0, 6, 4}};
Выход : 12
{(1,0)->(2,1)->(2,2)}
Вход: M[][] = {{1, 3, 1, 5},
{2, 2, 4, 1},
{5, 0, 2, 3},
{0, 6, 1, 2}};
Выход : 16
(2,0) -> (1,1) -> (1,2) -> (0,3) или
(2,0) -> (3,1) -> (2,2) -> (2,3)
Что я уже пробовал:
#include<iostream> #include<vector> using namespace std; int func(vector<vector<int>>a,int p,int q,int n,int m,int ans) { if(q==m-1) { return ans; } if(p==0) { return max(func(a,p,q+1,n,m,ans+a[p][q+1]),func(a,p+1,q+1,n,m,ans+a[p+1][q+1])); } else if(p==n-1) { return max(func(a,p,q+1,n,m,ans+a[p][q+1]),func(a,p-1,q+1,n,m,ans+a[p-1][q+1])); } else { return max(func(a,p,q+1,n,m,ans+a[p][q+1]), max(func(a,p-1,q+1,n,m,ans+a[p-1][q+1]),func(a,p+1,q+1,n,m,ans+a[p+1][q+1]))); } } int main() { //code int t; cin>>t; while(t--) { int n,m; cin>>n>>m; vector<vector<int>>a; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { int temp; cin>>temp; a[i].push_back(temp); } } int p=0; int q=0; int ans=0; cout<<func(a,p,q,n,m,ans+a[0][0])<<endl; } return 0; }
Gerry Schmitz
Никто не сможет расшифровать ваши бессмысленные имена переменных ... включая себя.
Raghurss
🤐😅