1 条题解
-
0
C :
#include <stdio.h> #include <math.h> int main() { int a[21][21], i, j, max, m, n, count = 0, k, time = 0, re1, re2, sum = 0; scanf("%d%d%d", &m, &n, &time); for(i = 1; i <= m; i++) { for(j = 1; j <= n; j++) { scanf("%d", &a[i][j]); if(a[i][j] != 0)count++; } } max = a[1][1]; int de1 = 1 , de2 = 1; for(k = 0; k < count; k++) { for(i = 1; i <= m; i++) { for(j = 1; j <= n; j++) { if(max < a[i][j]) { max = a[i][j]; de1 = i; de2 = j; } } } if(k == 0) { re1 = 0, re2 = de2; } if(time >= fabs(re1 - de1) + fabs(re2 - de2) + de1 + 1) { time -= fabs(re1 - de1) + fabs(re2 - de2) + 1; sum += a[de1][de2]; } else { break; } re1 = de1; re2 = de2; a[de1][de2] = 0; max = 0; } printf("%d", sum); return 0; }
C++ :
#include <cstdio> #include <cstdlib> #include <cmath> using namespace std; int hst[21][21]; int max_x,max_y; int c_x,c_y; int time=0; int cdd=0; int main() { int m,n,k; scanf("%d%d%d",&m,&n,&k); for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { scanf("%d",&hst[i][j]); } } for(int c=1;c<=1000;c++) { //find int max=0; for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { if(hst[i][j]>max) { max=hst[i][j]; max_x=i; max_y=j; //hst[i][j]=0; } } } //l if(c==1) { c_x=0; c_y=max_y; } if(time+abs(max_x-c_x)+abs(max_y-c_y)+max_x>=k) { break; } else { time+=abs(max_x-c_x)+abs(max_y-c_y); cdd+=hst[max_x][max_y]; hst[max_x][max_y]=0; c_x=max_x; c_y=max_y; time++; } } printf("%d",cdd); //system("pause"); return 0; }
Pascal :
type ji=record x,y,k:longint; end; var i,j,l,m,n,time,o,p,q,u:longint; a:array[1..1000]of ji; procedure qsort (l,r:longint); var x0,y0,z,mid:longint;t:ji; begin x0:=l;y0:=r; mid:=a[(l+r)div 2].k; repeat while a[x0].k>mid do inc(x0); while a[y0].k<mid do dec(y0); if x0<=y0 then begin t:=a[x0];a[x0]:=a[y0];a[y0]:=t;inc(x0);dec(y0);end; until x0>y0; if l<y0 then qsort(l,y0); if x0<r then qsort(x0,r); end; begin readln(m,n,time); for i:=1 to m do for j:=1 to n do begin read(a[(i-1)*n+j].k); a[(i-1)*n+j].x:=i; a[(i-1)*n+j].y:=j; end; qsort(1,m*n);p:=0; q:=0;o:=1; for i:=1 to m*n do if a[i].k>0 then p:=p+1; if a[1].x*2+1>time then begin write(0);exit;end else begin p:=p-1;q:=q+a[1].k;time:=time-a[1].x-1;end; while (p>0) do begin o:=o+1; u:=time; u:=u-abs(a[o].x-a[o-1].x)-abs(a[o].y-a[o-1].y)-1-a[o].x; if u>=0then begin time:=u+a[o].x;q:=q+a[o].k;p:=p-1;end else break; end; writeln(q); end.
- 1
信息
- ID
- 1777
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者