这个题目就说注意由于从路上到田里也算,所以就从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;
} 
京公网安备 11010502036488号