题目链接:P1086 花生采摘
题意:
大家一定要看清楚题意:按找从大到小的花生数来摘的!!!
然后按照题目模拟即可!
#include<bits/stdc++.h>
using namespace std;
const int N=22;
typedef struct Node {
int x,y,w;
Node (int X=-1,
int Y=-1,
int W=-1):
x(X),y(Y),w(W){}
bool operator < (const Node &t )const {
return w>t.w;
}
}Node ;
int n,m,k;
int a[N][N];
Node p[N*N+10];
int main()
{
scanf("%d%d%d",&n,&m,&k);
int cnt=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&a[i][j]);
if(a[i][j]){
p[cnt++]=Node(i,j,a[i][j]);
}
}
}
sort(p,p+cnt);
int cur,ans=0;
if( cnt==1 && p[0].x*2 + 1 <=k ){
ans=p[0].w;
}
else if( cnt>1 ){
int i;
cur = p[0].x;
for(i=1;i<cnt;i++){
cur++;
if(cur+p[i-1].x >k ) break;
cur+=abs(p[i-1].x-p[i].x)+abs(p[i-1].y-p[i].y);
ans+=p[i-1].w;
}
if(i==cnt && cur+1+(p[cnt-1].x-1)<k) {
ans+=p[cnt-1].w;
}
}
printf("%d\n",ans);
return 0;
}
/*
2 2 5
0 2
0 3
2 2 6
0 2
0 3
*/