1 条题解

  • 0
    @ 2021-6-14 23:29:39

    C++ :

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    struct node{
        int x,y;
        int dis_y;
        int value;
        int dis_next;
    } loc[1005];
    int m,n,k;
    int cmp(node a,node b)
    {
        return a.value>b.value;
    }
    int main()
    {
        int i,j,time;
        int num;
        int ans;
        while(~scanf("%d%d%d",&m,&n,&k))
        {
            num=1;
            time=k;
            ans=0;
            int a;
            for(i=1; i<=m; i++)
                for(j=1; j<=n; j++)
                {
                    scanf("%d",&a);
                    if(a!=0)
                    {
                        loc[num].value=a;
                        loc[num].dis_y=loc[num].x=i;
                        loc[num++].y=j;
                    }
                }
            sort(loc+1,loc+num,cmp);
            loc[1].dis_next=loc[1].x;
            for(i=2; i<num; i++)
                loc[i].dis_next=abs(loc[i].x-loc[i-1].x)+abs(loc[i].y-loc[i-1].y);
            int t=1;
             while(time>=loc[t].dis_y+loc[t].dis_next+1)
             {
                 ans=ans+loc[t].value;
                 time=time-1-loc[t].dis_next;
                 t++;
             }
             cout<<ans<<endl;
        }
        return 0;
    }
    
    

    Pascal :

    var p:array[1..20,1..20] of longint;
        n,m,k,t,i,j,ans,max,maxli,maxlj,maxi,maxj:longint;
    begin
      readln(m,n,k);
      for i:=1 to m do
        for j:=1 to n do
           read(p[i,j]);
      k:=k-2;t:=0;ans:=0;max:=0;
      for i:=1 to m do
        for j:=1 to n do
          if p[i,j]>max then
            begin
              max:=p[i,j];maxi:=i;maxj:=j;
            end;
      t:=t+maxi;
      while (t+maxi-1<=k)and(max>0) do
        begin
          ans:=ans+max;
          p[maxi,maxj]:=0;
          max:=0;
          for i:=1 to m do
            for j:=1 to n do
              if p[i,j]>max then
                begin
                  max:=p[i,j];
                  maxli:=i;
                  maxlj:=j;
                end;
          t:=t+1+abs(maxli-maxi)+abs(maxlj-maxj);
          maxi:=maxli;
          maxj:=maxlj;
        end;
      writeln(ans);
    end.
    
    • 1

    信息

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