动态规划之棋盘(简单版)
题目描述:
一个机器人从4*4的棋盘的左上角走到右下角,每次走一个,且只能向下或向右,并且要求不能连续向下或向右走,每个格子有自己的权值,请问怎样走权值总和最小?
题目分析:
这个题目是一个简单版本,因为题目要求了机器人不能连续向下或者向右走,所以机器人走的时候不会偏离对角线两步,我们看图:
所以机器人一直在蓝色区域里走,所以我们维持一个一维数组保存走到每一步的最小值即可。
C++源代码
/*Author: Chauncy_xu
Date:2019年12月1日*/
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int m,i=1;
cin>>m;
int chess[m][m],road[m];
for(int j=0;j<m;j++)
{
for(int p=0;p<m;p++)
{
cin>>chess[j][p];
}
}
if(m==1)
{
road[0]=0;
}
else if(m>=2)
{
road[0]=0;
while(i<m)
{
road[i]=road[i-1]+min(chess[i][i-1],chess[i-1][i]);
i++;
}
}
cout<<road[m-1];
return 0;
}