【2004NOIP普及组】T2 花生采摘

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;
}

猜你喜欢

转载自blog.csdn.net/bigwinner888/article/details/106304362