1 条题解

  • 0
    @ 2025-4-7 21:38:07

    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

    信息

    ID
    1933
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者