前言:
最近心情不好
一道简单动态规划的题
希望有帮助
问题描述:
小猫在玩一个淘宝游戏:
在一个神奇的国度里,土地被划分成n×n的网格(1≤n≤100),每个格子里写有一个数x(1≤x≤100),途径该格子的人会得到价值x的奖品。现在小猫在左上角(1,1),需要走到右下角(n,n),他每一步只能向右走一格或向下走一格。
小猫希望获得奖品的总值最大,希望你能编程帮他解决这个问题。
输入格式
第一行包含一个整数n,表示网格的规模。接下来n行,每行n个数,表示各个格子里的奖品价值。第1行第1个数表示左上角,第n行第n个数表示右下角。
输出格式
仅包含一个整数,为小猫获得奖品的最大总价值。
样例输入
5 9 8 9 5 6 8 1 8 5 5 5 4 4 9 7 8 1 9 9 8 3 2 1 3 1
样例输出
66
问题解析:
简单动态规划
不讲了
直接上代码
完整代码:
#include <bits/stdc++.h>
using namespace std;
int a[101][101],f[101][101];//定义数组
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];//数组读入
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
f[i][j]=max(f[i-1][j],f[i][j-1])+a[i][j];//转换方程
cout<<f[n][n];//输出结果
return 0;
}
没有技术含量
肯定AC
只要记住转换方程一切都可以
下期说一下动态规划的可行路径问题
(路径总数简单版)