输入格式:
输入的第一行是单个整数T,测试用例的数量(1≤T≤100)。每个测试用例开始一行包含空格隔开两个整数N M (1≤N,M≤1000)代表糖果网格的尺寸,紧随其后的是N行,每一个包含M个空格隔开整数,代表这一行糖果的健康值。网格中的每个整数将不小于- 2000,也不大于2000。
输出格式:
对于每个测试用例,打印包含单个整数的一行,该整数表示从非空子矩形中可以获得的健康值的最大总和。
输入样例:
在这里给出一组输入。例如:
1
3 3
-4 -2 -1
-3 2 3
1 4 5
输出样例:
在这里给出相应的输出。例如:
14
坑:TEL cin cout 换成了scanf printf才过。
#include <iostream>
#include <cstdio>
#include <memory.h>
using namespace std;
const int maxn = 1100;
int candy[maxn][maxn], dp[maxn][maxn];
int main()
{
int T, m, n;
scanf("%d",&T);
while(T--)
{
memset(dp, 0, sizeof(dp));
memset(candy, 0, sizeof(candy));
int mm = -2010;
scanf("%d %d",&m, &n);
for(int i = m; i >= 1; i--)
{
for(int j = n; j >= 1; j--)
{
scanf("%d",&candy[i][j]);
}
}
//状态转移方程
for(int i = 1; i <= m; i++)
{
for(int j = 1; j <= n; j++)
{
dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + candy[i][j];
mm = max(dp[i][j], mm);
}
}
printf("%d\n", mm);
}
return 0;
}