POJ 1928 The Peanuts

这两天的作业题目都没有什么技术含量,这道题只需要把每个有花生的点按照花生的量从大到小排起来,然后从头开始一个一个找,如果能摘到花生并且安全走到公路上就把花生加到我们的总数上。注意每次判断能不能走到某个点的时候要把走回到公路的时间也算上,判断完之后要注意在把走到公路所用的时间减去。

总之没什么技术含量……简单粗暴

#include<iostream>
#include<cmath>
#include<cstdio>
#include<memory.h>
#include<algorithm>
using namespace std;

#define maxn 55

struct peanuts{
    int x,y;
    int num;
};

bool operator < (peanuts a, peanuts b){
    return a.num > b.num;
}

int m,n,time_units;
int map[maxn][maxn]={0};
peanuts peanut[maxn*maxn]={0};
int pcount = 0;

void init(){
    memset(peanut,0,sizeof(peanut));
    memset(map,0,sizeof(map));
    pcount = 0;

    scanf("%d%d%d",&m,&n,&time_units);
    for(int i=0;i<m;++i){
        for(int j=0;j<n;++j){
            scanf("%d",&map[i][j]);
            if(map[i][j]){
                peanut[pcount].x = i;
                peanut[pcount].y = j;
                peanut[pcount].num = map[i][j];
                pcount++;
            }
        }
    }
    sort(peanut,peanut+pcount);
}

int work(){
    int result = 0;
    int steps = 1;

    steps += peanut[0].x + 1;
    steps += peanut[0].x + 1;

    if(steps > time_units)
        return 0;
    result += peanut[0].num;
    //printf("%d\n",result);
    steps -= peanut[0].x + 1;

    for(int i=1;i<pcount;++i){
        int dis = 0;
        dis += abs(peanut[i].x - peanut[i-1].x);
        dis += abs(peanut[i].y - peanut[i-1].y);
        steps += dis + 1;

        steps += peanut[i].x + 1;
        if(steps > time_units)
            return result;
        steps -= peanut[i].x + 1;
        result += peanut[i].num;
    }
    return result;
}

int main(){
    int t;
    scanf("%d",&t);

    while(t--){
        init();
        printf("%d\n",work());
    }  
    //system("pause");
    return 0;  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值