您的位置:首页 > 其它

hdu1078

2015-09-11 00:01 232 查看
此题走k步要求的是直走
#include<stdio.h>
#include<iostream>
using namespace std;
int dp[110][110];
int map[110][110];
int mov[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int k;
int n;
int dfs(int x,int y)
{
int _max=0;
if(dp[x][y]+1) return dp[x][y];
for(int i=1;i<=k;i++)
{
for(int j=0;j<4;j++)
{
int xx=x+mov[j][0]*i;
int yy=y+mov[j][1]*i;

if(xx<0||xx>=n||yy<0||yy>=n)continue;
if(map[xx][yy]>map[x][y])
{
int temp;
_max=_max>(temp=dfs(xx,yy))?_max:temp;
}

}
}
return dp[x][y]=map[x][y]+_max;
}
int main()
{
freopen("in1.txt","r",stdin);
int i,j;
while(1)
{
cin>>n>>k;
if(n==-1&&k==-1)break;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cin>>map[i][j];
dp[i][j]=-1;
}
}
cout<<dfs(0,0)<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: