1 solutions

  • 0
    @ 2025-11-5 15:54:15

    C++ :

    #include<cstdio>
    #include<algorithm>
    #include<cstdlib>
    using namespace std;
    const int maxn=100100;
    inline int max(int a,int b){return a>b?a:b;}
    inline int min(int a,int b){return a<b?a:b;}
    inline int read(){char ch=getchar(),w=1;int x=0;while(ch<'0'||ch>'9'){if(ch=='-')w=-1;
    ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return w*x;}
    inline void wr(int x){if(x<0)putchar('-'),x=-x;if(x>9)wr(x/10);putchar(x%10+'0');}
    inline void wrln(int x){wr(x);putchar('\n');}
    int v[600][600],m,n,k;
    int get(int &sx,int &sy,int &vi){
    	int newx=sx,newy=sy,Max=0,cost=-1;
    	for(int i=1;i<=m;i++)
    	for(int j=1;j<=n;j++)
    		if(Max<v[i][j])Max=v[i][j],newx=i,newy=j,cost=abs(sx-newx)+abs(sy-newy),vi=v[i][j];
    	v[newx][newy]=0;
    	sx=newx,sy=newy;
    	return cost;
    }
    int main(){int sx,sy,Max=0;
    	 m=read(),n=read(),k=read();
    	for(int i=1;i<=m;i++)
    	for(int j=1;j<=n;j++){
    		v[i][j]=read();
    		if(v[i][j]>Max)Max=v[i][j],sx=i,sy=j;
    	}
    	int step=sx+1,t,ans=Max,vi;
    	if(step+sx>k){
    		wrln(0);
    		return 0;
    	}
    	v[sx][sy]=0;
    	while((t=get(sx,sy,vi))!=-1){
    		if(step+t+sx+1>k)break;
    		ans+=vi;
    		step+=t+1;
    	}
    	wrln(ans);
    	return 0;
    }
    
    
    • 1

    Information

    ID
    17308
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By