Longest Run on a Snowboard(DP)

比较简单的DP,用记忆化搜索比较简单,递推。。。应该不好写吧 。

很容易发现,,对于同一个位置,它的最长路是一定的, 不会变的,因为路是递减的,所以该题很适合用记忆化搜索 。 由此我们也可以发现DP和搜索的联系 。

代码如下:#include<bits/stdc++.h>using namespace std;int T,r,c,a[105][105],d[105][105];int dx[] = {0,1,0,-1};int dy[] = {1,0,-1,0};char name[1000];int dp(int i,int j) {int& ans = d[i][j];if(ans >= 0) return ans;ans = 1;for(int k=0;k<4;k++) {int u = i+dx[k];int v = j+dy[k];if(u<1||u>r||v<1||v>c) continue;if(a[u][v]<a[i][j]) ans = max(ans,dp(u,v)+1);}return ans;}int main() {scanf("%d",&T);while(T–) {scanf("%s%d%d",name,&r,&c);memset(d,-1,sizeof(d));for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)scanf("%d",&a[i][j]);int ans = 0;for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)ans = max(ans,dp(i,j));printf("%s: %d\n",name,ans);}return 0;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

我不敢说我明天便可以做一个快乐的人,面朝大海春暖花开。

Longest Run on a Snowboard(DP)

相关文章:

你感兴趣的文章:

标签云: