水dp,菜鸡实锤hhhh
Description
Chieh最近在网上看到蓝翔非常火热。不知为什么他想到了一个问题,有一个n*m的矩阵
每一个小块里有k个石头。。现在挖掘机在左上角,挖掘机非常强大。。可以放无限的石头
但是它只能往右或者往下移动,现在Chieh想知道最多的石头从左上角到右下角。
Input
T 组数 T<=100
n m 1<=n. m<=1000
n行m个数 为石头数量 0<=s<=1000
Output
对于每组测试数据,输出对应的答案。
Sample Input
2
1 1
1
4 3
1 3 4
11 32 4
11 32 11
44 21 41
Sample Output
1
138
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll dp[1100][1100];
int s[1100][1100];
int main()
{
int t;
scanf("%d", &t);
while(t--){
memset(dp,0,sizeof(dp));
int n, m;
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
scanf("%d", &s[i][j]);
}
}
dp[1][1] = s[1][1];
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(i==1&&j==1) continue;
if(i==1){
dp[i][j] = dp[i][j-1]+s[i][j];
}else if(j==1){
dp[i][j] = dp[i-1][j]+s[i][j];
}else{
dp[i][j] = s[i][j]+max(dp[i-1][j],dp[i][j-1]);
}
}
}
printf("%lld\n", dp[n][m]);
}
return 0;
}