洛谷P1086花生采摘
最近在学习洛谷上的题,以后会持续更新的
文章目录
题目描述
输入格式
思想
具体思想利用深搜,算出他剩下的时间是否足够采摘下一个花生并返回到路面,如果足够就去采摘,如果不够就返回路面。
代码
#include<stdio.h>
#include<math.h>
void dfs(int x0,int y0,int time0);
int m,n,k,sum = 0;
int a[25][25];//定义全局变量
int main()
{
int i,j;
scanf("%d%d%d",&m,&n,&k);
for(i = 1; i <= m; i++)
{
for(j = 1; j <= n; j++)
{
scanf("%d",&a[i][j]);
}
}
dfs(0,0,k);
printf("%d",sum);
return 0;
}
void dfs(int x0,int y0,int time0)
{
int x,y,time;
int maxx = 0;
int i,j;
for(i = 1; i <= m; i++)
{
for(j = 1; j <= n; j++)
{
if(a[i][j] > maxx)
{
maxx = a[i][j];//找到现存最多花生植株的位置
x = i;
y = j;//存下该位置
}
}
}
if(y0 == 0)//判断是否为第一步,即为从路面走到花生田
{
y0 = y;
}
time = fabs(x - x0) + abs(y - y0) + x + 1;
//算出从现位置到花生植株并返回地面一共所需时间
//fabs和abs均存在<math.h>文件里
if(time0 < time || a[x][y] == 0) return;
//如果没有花生植株了和剩下的时间已经不足返回路面则retrurn
else
{
sum += a[x][y];
a[x][y] = 0;//采摘花生后该位置花生为0
dfs(x,y,time0 - abs(x - x0) - abs(y - y0) - 1);
}
}