坐标型动态规划,顾名思义,此类动态规划与坐标位置有很大的关系。
它的状态划分与维数有关。如用二维坐标系f[i,j]表示状态,它的值一般代表x坐标为i,y坐标为j时的最佳值,它与(i-1,j)或(i,j-1)的值有很大关系,一般采用递推方法来实现。
一、计算所有方案:
f[i][j]=f[i-1][j]+f[i][j-1] 【例题】过河卒
二、计算一条最佳路径:
f[i][j]=min(f[i-1][j],f[i][j-1])+a[i][j] 【例题】数字金字塔
【例1】拾垃圾的机器人
【问题描述】在一个n*m的棋盘内,一些格子里有垃圾要拾捡。现在有一个能捡垃圾的机器人从左上格子里出发,每次只能向右或者向下走。每次他到达一个点,就会自动把这个点内的垃圾拾掉。最多能拾多少垃圾。在最多的情况下,有多少种拾垃圾方案?
【数据范围】n<=100,m<=100
【文件输入】
3 3
100
000
010
【文件输出】
2
3
【核心代码】
状态:p[i][j]表示走到(i,j)这个位置时,最多可拾到的垃圾数
状态:q[i][j]表示走到(i,j)这个位置时,在拾到的垃圾数最多情况下的方案数
p[i][j]=x-'0';
p[i][j]+=max(p[i-1][j],p[i][j-1]);
if(a[i-1][j]<a[i][j-1]) q[i][j]+=q[i][j-1];
else if(p[i-1][j]>p[i][j-1]) q[i][j]+=q[i-1][j];
else q[i][j]+=q[i-1][j]+q[i][j-1];
【例2】方格取数
Description
给定一个 N * M 的矩阵 , 记录左上角为 (1,1) , 右下角为 ( N , M ) , 现在从 (1,1)始取数