1 条题解
-
0
C++ :
#include <bits/stdc++.h> using namespace std; //p:存放数组的坐标及坐标对应的花生数量 int m,n,k,a[30][30],p[1000][3]; int main(){ int i,j,s = 0; //读入数据 cin>>m>>n>>k; for(i = 1;i <= m;i++){ for(j = 1;j <= n;j++){ cin>>a[i][j]; if(a[i][j] > 0){ p[s][0] = i; p[s][1] = j; p[s][2] = a[i][j]; s++; } } } //对p数组按照花生数量由大到小排序 for(i = 1;i < s;i++){ for(j = 0;j <= s - i - 1;j++){ if(p[j][2] < p[j+1][2]){ swap(p[j],p[j+1]); } } } //统计时间和摘到的花生数量 int time = 0; int sum = 0; //遍历每个花生点 for(i = 0;i < s;i++){ //如果是第一个花生点 if(i == 0){ if(p[i][0] + 1 + p[i][0] <= k){ time = p[i][0] + 1; sum = sum + p[i][2]; }else{ break; } }else{ if(time + abs(p[i][0]-p[i-1][0]) + abs(p[i][1]-p[i-1][1]) + 1 + p[i][0] <= k){ time = time + abs(p[i][0]-p[i-1][0]) + abs(p[i][1]-p[i-1][1]) + 1; sum = sum + p[i][2]; }else{ break; } } } cout<<sum<<endl; }Pascal :
program liumohan; type date=record x,y,d:longint; end; var a:array[1..40000]of date; k,i,j,m,n,q,t,w,p:longint; procedure qsort(l,r:longint); var i,j:longint; m,t:date; begin i:=l; j:=r; m:=a[(l+r)shr 1]; repeat while a[i].d<m.d do inc(i); while a[j].d>m.d do dec(j); if i<=j then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; inc(i); dec(j); end; until i>j; if l<j then qsort(l,j); if i<r then qsort(i,r); end; begin read(m ,n,k); p:=n*m ; for i:=1 to p do begin read(a[i].d); if i mod n=0 then a[i].x:=trunc(i/n) else a[i].x:=trunc(i/n)+1; if ((i mod n)=0)then a[i].y:=n else a[i].y:=i mod n; end; if (n=1 )and( m =1) and (k>3) then begin write(a[1].d);halt;end; qsort(1,p); t:=a[p].x+1; w:=a[p].d; if t+a[p].x>k then begin write(0);halt;end; for i:=p-1 downto 1 do begin q:=t+abs(a[i].x-a[i+1].x)+abs(a[i].y-a[i+1].y)+1; if (q+abs(a[i].x))>k then begin write(w);halt;end; if (q+abs(a[i].x)<=k) and (a[i].d=0) then begin write(w);halt;end else begin t:=q; w:=w+a[i].d; end; end; end.
- 1
信息
- ID
- 462
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者