#include<bits/stdc++.h>
using namespace std;#definedbdouble#definelllonglong#definescscanf#defineprprintf#definefifirst#definesesecond#definepbpush_back#definem_pmake_pair#definePirpair<int,int>#defineinf0x3f3f3f3f#defineINF0x3f3f3f3f3f3f3f3f/*==========ACMer===========*/constint N =505;int a[N][N], b[N][N], dp[N][N];intmain(){int T, cas =1;sc("%d",&T);while(T --){int n, m;sc("%d %d",&n,&m);for(int i =1; i <= n; i ++)for(int j =1; j <= m; j ++){sc("%d",&a[i][j]);
a[i][j]+= a[i][j -1];}for(int i =1; i <= n; i ++)for(int j =1; j <= m; j ++){sc("%d",&b[i][j]);
b[i][j]+= b[i -1][j];}memset(dp,0,sizeof dp);for(int i =1; i <= n; i ++)for(int j =1; j <= m; j ++)
dp[i][j]=max(dp[i][j -1]+ b[i][j], dp[i -1][j]+ a[i][j]);pr("Case %d: %d\n", cas ++, dp[n][m]);}return0;}
题目链接题意给我们一个 n * m 方格,之后输入的时候,输入两个 n *m 的矩阵 a、b,a [i][j] 表示第一种矿石在 (i, j) 位置有 a [i][j] 个, b [i][j] 表示第二种矿石在(i,j)位置有 b [i][j] 数量的矿石。思路这题是第二次做… 还是没有做出来,这个人是真的菜啊。。。我们设状态转移方程为:dp [x][y] 表示以左上角为(1,1)有下角为(x, y)的矩形的最大收益,那么所这题的答案就是 dp [n][m], 这题首先我们要明白一点如果我