1 条题解
-
0
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
- 1861
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者