一个小动物“KK”正从沙漠区域(矩形)的左上角沿着向右或向下的方向往右下角跑去。KK太聪明了,它居然能在跑的过程中会选择吃掉尽可能多的虫子线路。你知道它吃掉多少虫子吗?
【标准输入】
第一行:N M 表示沙漠是一个N*M的矩形区域
接下来有N行:每行有M个正整数,Xi1 Xi2 ……Xim 表示各位置中的虫子数(单个空格隔开)
【标准输出】
输出有一个整数, 表示“KK”吃掉最多的虫子数。
【约束条件】
1≤ N M ≤ 20 0≤Xij≤ 500 (i=1,2….N, j=1,2…,M)
假设“KK”只能向右走或向下走。
【 样 例 】
标准输入 标准输出
34 24
31 2 8
53 4 6
10 2 3
注:这题很水,为啥当年搞不定了。哎。。。
代码:
#include <iostream>
using namespace std;
int N; //行
int M; //列
int F[21][21] = {0};
int X[21][21] = {0};
//递推方程:F[i][j] = max(F[i][j - 1],F[i - 1][j]) + X[i][j];
//边界条件:F[i][0] = 0;F[0][j] = 0;
int DP()
{
//初始化
for (int i = 0;i < N;i++)
{
F[i][0] = 0;
}
for (int j = 0;j < M;j++)
{
F[0][j] = 0;
}
//递推
for (int i = 1;i <= N;i++)
{
for (int j = 1;j <= M;j++)
{
F[i][j] = max(F[i][j - 1],F[i - 1][j]) + X[i][j];
}
}
return F[N][M];
}
int main()
{
cin >> N >> M;
for (int i = 1;i <= N;i++)
{
for (int j = 1;j <= M;j++)
{
cin>>X[i][j];
}
}
cout<<DP()<<endl;
system("pause");
return 1;
}