小明在边塞
题目大意:
小明在(1,1),他要去到(n,m),当此点为1时,他的体力值-1,当此点为2时,他的体力值+1,他只会向下或向右走(就是往终点的方向),求最大体力值
样例输入
5 5
0 1 1 1 1
0 1 2 1 0
0 2 0 1 1
0 0 2 0 0
0 0 0 0 0
样例输出
2
数据范围限制
对于30%的数据,1≤n,m≤10
对于80%的数据,1≤n,m≤100
对于100%的数据,1≤n,m≤500
解题思路
这道题明显的DP,直接往n,m推,再加个判断,是1时-1,是2时+1
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,m,x,a[505][505];
int main()
{memset(a,-127/3,sizeof(a));scanf("%d %d",&n,&m);a[1][0]=0;for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){scanf("%d",&x);a[i][j]=max(a[i-1][j],a[i][j-1]);if (x==1) a[i][j]--;if (x==2) a[i][j]++;}printf("%d",a[n][m]);return 0;
}