您的位置:首页 > 其它

|洛谷|模拟|P1086 花生采摘

2016-09-17 17:59 429 查看
http://www.luogu.org/problem/show?pid=1086

由于必须采摘当前最大植株,所以这道题水了很多,当如果摘了当前点返回不够时间的话,那这个点就不能摘。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#define ms(i,j) memset(i,j, sizeof i);
using namespace std;
struct fruit
{
int x;
int y;
int v;
}fr[405];
bool cmp(fruit const &a, fruit const &b)
{
return b.v<a.v;
}
int cnt = 0;
int map[30][30];
int main()
{
int m,n,k;
scanf("%d%d%d", &m ,&n ,&k);
for (int i=1;i<=m;i++)
for (int j=1;j<=n;j++)
{
scanf("%d", &map[i][j]);
if (map[i][j])
{
++cnt;
fr[cnt].x = i;
fr[cnt].y = j;
fr[cnt].v = map[i][j];
}
}
sort(fr+1, fr+1+cnt, cmp);
int ans = 0;
int nt = fr[1].x+1, nx = fr[1].x, ny = fr[1].y;
if (nt+fr[1].x<=k) ans+=fr[1].v; else {printf("0\n");return 0;}
for (int i=2;i<=cnt;i++)
{
nt += abs(fr[i].x - nx) + abs(fr[i].y - ny) + 1;
if (nt+fr[i].x<=k) {ans += fr[i].v; nx = fr[i].x, ny = fr[i].y;}
else break;
}
printf("%d\n", ans);
getchar();getchar();getchar();getchar();getchar();getchar();getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: