这个题目就说注意由于从路上到田里也算,所以就从1~m记录坐标合适
for (1~m) for (1~n) 输入该点花生数 按花生数多少排序 for (遍历所有花生i:0~cnt-1){ if (第一次)时间+=a[i]的纵坐标+采花生时间1 else 时间+=a[i]和a[i-1]横纵坐标的差+采花生时间1 if (时间<规定时间) 花生数+=a[i]的花生 }
#include <bits/stdc++.h> using namespace std; int m,n,k,cnt,ans,t; const int N=405; struct Node{ int i,j,num; }; Node a[N]; bool cmp(Node a,Node b){ return a.num>b.num; } int main(int argc, char** argv) { cin>>m>>n>>k; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++){ scanf("%d",&a[cnt].num); a[cnt].i=i,a[cnt].j=j; cnt++; } sort(a,a+cnt,cmp); for(int i=0;i<cnt;i++){ if(i==0){ t+=a[i].i+1; }else{ t+=abs(a[i].i-a[i-1].i)+abs(a[i].j-a[i-1].j)+1; } if(t+a[i].i<=k) ans+=a[i].num; else break; } cout<<ans<<endl; return 0; }