--- title: "摘花生" created: 2025-11-28 tags: - 算法 --- # 摘花生 ## 题目 [摘花生](https://www.acwing.com/solution/content/49332/) ![[image-2b6a7c86.png]] ## 思路分析 和上题差不多 分析发现 每个点的状态可以从左边和上边推出来 ![[image-6828e2a8.png]] 状态表示仍为f[i][j] 表示 从起点走到ij 摘到花生的最大价值 状态转移方程可以为 f[i][j]=max(f[i-1][j]+w[i][j],f[i][j-1]+w[i][j]); ![[image-3f7e4b3d.png]] ![[image-51ee5179.png]] ## 代码实现 ```cpp #include using namespace std; const int N=110; int w[N][N]; int f[N][N]; int n,m; int main() { int T;cin>>T; while(T--){ memset(w,0,sizeof w); memset(f,0,sizeof f); cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>w[i][j]; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ f[i][j]=max(f[i-1][j]+w[i][j],f[i][j-1]+w[i][j]); } } cout<