题解:动态规划,每个点的最大花生数等于走东和走南两条路的最大花生数,终点的花生数就是她本身的花生数量,从终点依次往上推,就可以得出起始点的最大数量
#include <stdio.h> #include <iostream> using namespace std; int a[105][105],b[105][105]; int r,c; int tmp(int x,int y){ if(b[x][y]!=0)return b[x][y]; if(y+1>=c){ b[x][y]=max(b[x][y],tmp(x+1, y))+a[x][y]; return b[x][y]; }else if(x+1>=r){ b[x][y]=max(b[x][y],tmp(x, y+1))+a[x][y]; return b[x][y]; }else{ int t=max(tmp(x,y+1),tmp(x+1, y)); b[x][y]=max(t,b[x][y])+a[x][y]; return b[x][y]; } } int main(){ int k; cin>>k; while(k--){ cin>>r>>c; for(int i=0;i<r;i++){ for(int j=0;j<c;j++){ cin>>a[i][j]; b[i][j]=0; } } b[r-1][c-1]=a[r-1][c-1]; int t=0; for(int i=0;i<r;i++){ for(int j=0;j<c;j++){ t=max(t,tmp(i,j)); } } cout<<t<<endl; } }