AcWing 418. 花生采摘
原题链接
中等
作者:
Sankano
,
2022-03-01 10:29:13
,
所有人可见
,
阅读 228
自己搞了个套路
#include<bits/stdc++.h>
using namespace std;
const int N=510;
struct edge{
int x,y,w;
int t;
bool operator <(edge const &d)
{
return w>d.w;
}
}d[N];
int n,m,k;
int main()
{
cin>>n>>m>>k;
int cnt=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>d[cnt].w;
d[cnt].x=i;
d[cnt++].y=j;
}
sort(d+1,d+cnt+1);
int res=0;
for(int i=1;i<cnt&&d[i].w;i++)
{
if(i==1) d[1].t=d[1].x+1;
else d[i].t=d[i-1].t+abs(d[i].x-d[i-1].x)+abs(d[i].y-d[i-1].y)+1;
if(d[i].t+d[i].x<=k)
res+=d[i].w;
}
cout<<res;
return 0;
}