D - FatMouse and Cheese HDU - 1078

题意
肥老鼠在一个城市里储存了一些奶酪。城市可以被看作是一个尺寸n的正方形网格:每个网格位置都有标签(p,q),其中0<=p 输入 有几个测试用例。每个测试用例包括 包含1到100之间的两个整数的行:n和k n行,每行有n个数字:第一行包含位置(0,0)(0,1)处的奶酪块数。。。(0,n-1);下一行包含位置(1,0),(1,1)。。。(1,n-1)等等。 输入以一对-1结束。
输出 对于一行中的每个测试用例输出,一个整数表示收集的奶酪块的数量。
解析稍等
借鉴代码
#include
using namespace std;
int mp[105][105],d[105][105];
int n,k;
int dfs(int p,int q)
{
if(!d[p][q])
{
int i,s,e,temp,now=0;
s=p-k;//往左走
e=p+k;//往右走
if(s<0) s=0;//防止左边出界
if(e>n-1) e=n-1;//防止右边出界
for(i=s;i<=e;i++)
{
if(mp[i][q]>mp[p][q])//下一个位置的奶酪数大于当前位置的奶酪数就开始搜索
{
temp=dfs(i,q);//搜索行并记录奶酪数
if(now now=temp;//奶酪数量大于当前值就重置
}
}
s=q-k;//和上面一样 列的
e=q+k;
if(s<0) s=0;
if(e>n-1) e=n-1;
for(i=s;i<=e;i++)
{
if(mp[p][i]>mp[p][q])
{
temp=dfs(p,i);
if(now now=temp;
}
}
d[p][q]=now+mp[p][q];//记录最大奶酪数
}
return d[p][q];//返回值
}

int main()
{
while(scanf("%d%d",&n,&k)==2&&n!=-1)
{
int i,j;
for(i=0;i {
for(j=0;j {
scanf("%d",&mp[i][j]);//输入
}
}
memset(d,0,sizeof(d));//初始化
printf("%d\n",dfs(0,0));//输出
}
return 0;
}

你可能感兴趣的:(D - FatMouse and Cheese HDU - 1078)