https://www.luogu.org/problem/P1086
using namespace std;
typedef long long ll;
int m,n,k,ans=0;
int a[25][25];
void dfs(int x,int y,int time) {
int Max=-(1<<30),nx,ny; //Max最大的花生点,nx最大花生点的x坐标 ,ny最大花生点的y坐标
for(int i=1; i<=m; i++)
for(int j=1; j<=n; j++)
if(a[i][j]>Max) {
Max=a[i][j];
nx=i;
ny=j;//更新
}
if(y==0) //如果从路边开始,
y=ny;//则只需要移动的行的数目
int nt=abs(nx-x)+abs(ny-y)+nx+1; //到达花生,采摘,nx表示并返回边界,1表示采摘花生
if(time<nt || a[nx][ny]==0) //如果剩余的时间少于nt或者已经被采摘过
return;
else {
ans+=a[nx][ny]; //累加
a[nx][ny]=0; //清零
dfs(nx,ny,time-abs(nx-x)-abs(ny-y)-1); //进行下一次
}
}
int main() {
scanf("%d %d %d",&m,&n,&k);
for(int i=1; i<=m; i++)
for(int j=1; j<=n; j++)
scanf("%d",&a[i][j]);
dfs(0,0,k);
printf("%d\n",ans);
return 0;
}
知识兔