好像可以先从某颗花生跳回路边再从路边跳到下一颗花生那里,就可以减少某些路径的长度不是吗?但是下面的代码a不了啊
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int m,n,k,b,tot,sum,l;
struct Peanut{
int x,y,num;
}a[410];
bool cmp(Peanut c,Peanut b){
return c.num>b.num;
}
int main(){
scanf("%d%d%d",&m,&n,&k);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++){
scanf("%d",&b);
if(b){
a[++tot].x=i;
a[tot].y=j;
a[tot].num=b;
}
}
sort(a+1,a+tot+1,cmp);
k-=a[1].x+1;
sum+=a[1].num;
if(k<a[1].x){
cout<<0<<endl;
return 0;
}
for(int i=2;i<=tot;i++){
l=abs(a[i].x-a[i-1].x)+abs(a[i].y-a[i-1].y);
l=min(l,a[i].x+a[i-1].x);
k-=l;
if(k<a[i].x+1){
cout<<sum<<endl;
return 0;
}
else{
sum+=a[i].num;
k--;
}
}
cout<<sum;
return 0;
}