zju 1107

       题目意思是给定一幅图,老鼠只能前后左右移动且最多移动k个格子(不一定在同一行或同一列,但不这样考虑也可以过。。。。),每个格子均有一定权值的食物,问从起点(0,0)开始出发的老鼠,怎么走可以获得权值最大的食物,同时要求下一个到达的格子的食物权值大于当前格子的。

       和poj的滑雪一题几乎一致,解题方法自然也是记忆化搜索。

        代码很简单:

 

      

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int N=200;
int map[N][N];
int vis[N][N];
int dir[4][2]={0,1,0,-1,-1,0,1,0};
int n,k;

void init()
{
	for(int i=0;imax) max=vis[x1][y1];
				}
			}
		}
	}
	return map[x][y]+max;
}

int main()
{
	while(scanf("%d%d",&n,&k)==2)
	{
		if(n==-1 && k==-1) break;
		init();
		printf("%d\n",dfs(0,0));
	}
	return 0;
}


 

你可能感兴趣的:(ACM,dp问题)