前言
DP 方面太菜了,要多练习,多思考,多做好题。
摘花生
Hello Kitty想摘点花生送给她喜欢的米老鼠。
她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。
地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。
Hello Kitty只能向东或向南走,不能向西或向北走。
问Hello Kitty最多能够摘到多少颗花生。
DP 的一道板子题目,对于当前位置 \((i,j)\) 可以从 \((i-1,j),(i,j-1)\) 转移过来,所以取其中的最大值即可。
#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define pre(i,a,b) for(int i=a;i>=b;i--)
#define getmax(a,b) a=max(a,b)
#define getmin(a,b) a=min(a,b)
using namespace std;
namespace Test{const int N=1010;int Ts,n,m,a[N][N],ans;void Main(){cin>>Ts;while(Ts--){ans=0;cin>>n>>m;rep(i,1,n)rep(j,1,m)cin>>a[i][j];rep(i,1,n)rep(j,1,m)a[i][j]+=max(a[i-1][j],a[i][j-1]),getmax(ans,a[i][j]);cout<<ans<<'\n';}}
}
int main(){ios::sync_with_stdio(false);*cin.tie(nullptr)<<fixed<<setprecision(20);Test::Main();return 0;
}