P1086 花生采摘
题目传送门
思路:
贪心,如果回去的时间够,能多采一株是一株。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=4e2+10;
struct node
{
int x,y,s;
} a[N];
int n,m,k,tot;
void input()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
int t;
scanf("%d",&t);
if(t>0) a[++tot].x=i,a[tot].y=j,a[tot].s=t;
}
}
bool cmp(node a,node b) {return a.s>b.s;}
int main()
{
fre(peanuts);
input();
sort(a+1,a+1+tot,cmp);
int ans=0,t=0;
for(int i=1;i<=tot;i++)
{
if(i==1) t+=a[i].x+1;
else t+=abs(a[i-1].x-a[i].x)+abs(a[i-1].y-a[i].y)+1;
if(t+a[i].x>k) break;
ans+=a[i].s;
}
printf("%d\n",ans);
return 0;
}