切记采摘还需要1个单位时间,记得减去
#include <bits/stdc++.h>
using namespace std;
struct peant
{
int row;
int line;
int amount;
} a[500];
bool cmp( peant x,peant y)
{
return x.amount<y.amount;
}
int main()
{
int n,m,time,b,k=0;
scanf("%d%d%d",&n,&m,&time);
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++) //存数据
{
scanf("%d",&b);
if(b!=0)
{
a[k].row=i;//存行
a[k].line=j;//存列
a[k].amount=b;//存每株花生数
k++;
}
}
sort(a,a+k,cmp);//从小到大排序
a[k].row=0,a[k].line=0;//存起点行,列
int sum=0;//采摘花生总数
time=time+a[k-1].line;//循环中多走了起点处的横移
while(time>=0)
{
time=time-fabs(a[k-1].row-a[k].row)-fabs(a[k-1].line-a[k].line)-1;//从k株到达k-1株后,-1代表采摘时间,所剩时间
if(time<a[k-1].row)//k-1株时间不够回终点,该处花生采不到
break;
else
{
sum+=a[k-1].amount;
k--;//到下一株
}
}
printf("%d\n",sum);
return 0;
}