救救孩子
查看原帖
救救孩子
338147
01bit楼主2020/9/12 13:42
#include<cstdio>
using namespace std;
int N,M,K;
const int dir[4][2]={{0,-1},{0,1},{-1,0},{1,0}};
int ans=0,P[20+1][20+1];
bool book[20+1][20+1]={};
void dfs(int x,int y,int cnt,int t){
    if(t<=0){if(y==0)ans=cnt>ans?cnt:ans;return;}
    //从路边跳到最靠近路边(即第一行)的某棵花生植株;
    if(y==0)dfs(x,1,cnt,t-1);
    //从一棵植株跳到前后左右与之相邻的另一棵植株;
    for(int i=0;i<4;i++){
        int x1=x+dir[i][0],y1=y+dir[i][1];
        if(1<=x1&&x1<=N&&1<=y1&&y1<=M)dfs(x1,y1,cnt,t-1);
    }
    //采摘一棵植株下的花生;
    if(!book[x][y]){
        book[x][y]=true;
        dfs(x,y,cnt+P[x][y],t-1);
        book[x][y]=false;
    }
    //从最靠近路边(即第一行)的某棵花生植株跳回路边。
    if(y==1)dfs(x,0,cnt,t-1);
}
int main(){
    scanf("%d%d%d",&N,&M,&K);
    for(int i=1;i<=M;i++)
        for(int j=1;j<=N;j++)
            scanf("%d",&P[i][j]);
    for(int i=1;i<=N;i++)
        dfs(i,0,0,K);
    printf("%d",ans);
    return 0;
}
2020/9/12 13:42
加载中...