题目大意:
这是一道搜索题,老鼠想吃奶酪,每次最多能走k步并且只能走直线(上下左右),因为某些原因每次吃的奶酪数量必须多于上一次吃的奶酪数量,现在问题来了,
让聪明的你求出老鼠从起点出发能吃到的最大奶酪总量。
题目分析:
DFS+记忆搜索,记录从每个点出发能吃到的奶酪数量,最后求出从起点出发能吃到的奶酪数量。
源代码:
#include<iostream> using namespace std; int map[100][100]; int dp[100][100]; int n,k; int dir[4][2]={1,0,-1,0,0,1,0,-1}; int dfs(int x,int y); int main() { while(cin>>n>>k) { if(n==-1&&k==-1) break; for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>map[i][j]; memset(dp,-1,sizeof(dp)); cout<<dfs(0,0)<<endl; } return 0; } int dfs(int x,int y) { int xx,yy; int MAX=0; for(int i=0;i<4;i++) for(int step=1;step<=k;step++) { xx=x+step*dir[i][0]; yy=y+step*dir[i][1]; if(xx>=0&&xx<n&&yy>=0&&yy<n&&map[xx][yy]>map[x][y]) { int temp=0; if(dp[xx][yy]==-1) temp=dfs(xx,yy); else temp=dp[xx][yy]; MAX=MAX>temp?MAX:temp; } } dp[x][y]=MAX+map[x][y]; return dp[x][y]; }当前水平评级:5