动态规划入门-矩阵取数

来源:互联网 发布:python hmmlearn库 编辑:程序博客网 时间:2024/06/11 01:57

对应一个矩阵(不妨设是一个正方形的),我们需要从左上角走到右下角,每一个格子都有自己的数字,每一次只能走右边一格或者下方的一个格子,试求我们到达终点后可以得到的最大值。

输入

第1行:N,N为矩阵的大小。(2 <= N <= 500)
第2 - N + 1行:每行N个数,中间用空格隔开,对应格子中奖励的价值。(1 <= N[i] <= 10000)

输出

输出能够获得的最大价值。

输入示例

3
1 3 3
2 1 3
2 2 1

输出示例

11

题目来源(http://www.51nod.com/tutorial/course.html#!courseId=1&isCurrent=1)


解题思路

1、这是一道动态规划的题目,我们首先要想到,首先,这道题我和前面写的一篇文章一样,都是由前面的(局部最优解),得到最后我们所需要的整体最优解。在上一篇文章(super jumping jumping),我们的局部最优解就是我们正在考虑的”潜在终点“的”前子“所对应的获得的分数的最优解。在这里,也是一样的。

为什么呢?
因为我们对于终点而言,要么从左边来,要么从上边来,我们考虑究竟是左边来的线路得到的分数高呢,还是上边的分数高。这里就有一个问题,我们的左边的那个格子根据算法所带的数值,是不是也要对应的是以它作为”终点“而言的最优解呢?如果不是,我们还有什么需要考虑的呢?整体的最优解,就是靠局部的最优解来堆起来的。


我们可以举一个不太恰当的比方,假如你想高考的时候金榜题名,得到最好的结果,这时候你需要什么前提(假设这个世界努力是决定因素)
那么,我们不妨以高二作为一个中点,高一到高二我们是不是要做到最好,学的最好,然后高二到高三,是不是也要学到最好,最扎实。最终高考凭借扎实的基础和实力得到最好的结果?
或许你说,我们高一可以不太努力,高二可以比现在更努力。但是你要知道,高二的学习效果是有上限的,你想达到高考成绩MAX,必须高一到高二学习MAX加上高二到高三学习MAX

写到这里,我只想说明这个只是个例子,可能并不太准确,想表达的意思就是局部最优解组成了整体的最优解

不知道这里pong友们有没有一点疑惑。。。。。那就是,假如我们现在考虑的点不在最终的最优路线中怎么办?
没关系啊,因为我们的算法已经帮我们选择了。

2、对于每一个格子,它都有从左边来,和从上边来的两种选择,这时候就需要取MAX

if(dp[i-1][j]+a[i][j]>dp[i][j-1]+a[i][j])
{
dp[i][j]=dp[i-1][j]+a[i][j];
}
else
{
dp[i][j]=dp[i][j-1]+a[i][j];
}
在这里,我觉得大家可以把数组的行和列都开大一个,因为我们对应的第一行和第一列,是分别没有(从上边来)和(从左边来)的概念,这时候我们只需要把第0行和第0列弄成-1就好了,(不加还-1了肯定不是最优解了对吧。)

通常这个方程也就是很多人说的什么状态转移方程

在我看来,就是通过这个方程把考虑目前的情况转移到考虑前面已经考虑过的情况。。。。。。


#include<iostream>using namespace std;int a[501][501];long long dp[501][501];int main(){int n=0;while(cin>>n){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){a[i][j]=0;dp[i][j]=0;}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>a[i][j];}}dp[1][1]=a[1][1];for(int i=0;i<=n;i++)a[0][i]=-1;for(int i=0;i<=n;i++)a[i][0]=-1;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(dp[i-1][j]+a[i][j]>dp[i][j-1]+a[i][j]){dp[i][j]=dp[i-1][j]+a[i][j];}else{dp[i][j]=dp[i][j-1]+a[i][j];}}}cout<<dp[n][n]<<endl;}}

教程来自这里
http://www.51nod.com/tutorial/course.html#!courseId=1&isCurrent=1
有想法的pong友也可以和我交流呀呀呀

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 进入不良网站手机发信息怎么办 发不良信息被停机了怎么办 手机qq登录显示被冻结怎么办 qq账户被冻结了怎么办 qq钱包账户被永久冻结怎么办 怎么办转让费还没给我 收钱吗不能抵用红包怎么办 红包抵扣被关了怎么办 天猫客户给差评怎么办 淘宝闪电退款有纠纷怎么办呀 手机屏幕右下角出现彩色点怎么办 在超市买到假货怎么办 天猫超市多发货怎么办 天猫中不小心取消退款了怎么办 天猫超市写错了怎么办 二维码收付款不到红包怎么办 天猫优惠劵过期了怎么办 天猫购物津贴用不完怎么办 天猫上买的大件东西实物不符怎么办 天猫上面料成分与实物不符怎么办 闲鱼发货与实物不符怎么办 天猫超市买贵了怎么办 天猫超市里购买的东西退货怎么办 淘宝店上传的图片不清楚怎么办 微信图片打印出来不清楚怎么办 微信图片打印不清楚怎么办 淘宝上传商品视频不清楚怎么办 手机安装器没了怎么办 我不做直播换工作怎么办 天猫发票被投诉怎么办 天猫机顶盒闪退怎么办 苹果8红色掉漆怎么办 毛坯房验房房及厅试水时漏水怎么办 淘宝退货赠品被拆了怎么办 如果淘宝买家说赠品不好怎么办 淘宝顾客反应没赠品怎么办 淘宝上买东西赠品不给怎么办 天猫店关了质量有问题怎么办 蘑菇街开店被骗了怎么办 百视通网络机顶盒恢复出厂后怎么办 王牌电视出现无信号怎么办