SWUSTOJ 348: 花生采摘

发布时间:2024年01月21日

在这里插入图片描述
切记采摘还需要1个单位时间,记得减去

#include <bits/stdc++.h>
using namespace std;

struct peant
{
    int row;
    int line;
    int amount;
} a[500];

bool cmp( peant x,peant y)
{
    return x.amount<y.amount;
}
int main()
{
    int n,m,time,b,k=0;
    scanf("%d%d%d",&n,&m,&time);
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++) //存数据
        {
            scanf("%d",&b);
            if(b!=0)
            {
                a[k].row=i;//存行
                a[k].line=j;//存列
                a[k].amount=b;//存每株花生数
                k++;
            }
        }
    sort(a,a+k,cmp);//从小到大排序
    a[k].row=0,a[k].line=0;//存起点行,列
    int sum=0;//采摘花生总数
    time=time+a[k-1].line;//循环中多走了起点处的横移
    while(time>=0)
    {
        time=time-fabs(a[k-1].row-a[k].row)-fabs(a[k-1].line-a[k].line)-1;//从k株到达k-1株后,-1代表采摘时间,所剩时间
        if(time<a[k-1].row)//k-1株时间不够回终点,该处花生采不到
            break;
        else
        {
            sum+=a[k-1].amount;
            k--;//到下一株
        }
    }
    printf("%d\n",sum);
    return 0;
}


文章来源:https://blog.csdn.net/qq_52327660/article/details/135696343
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。