码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 2004NOIP普及组真题 2. 花生采摘


    线上OJ:

    【04NOIP普及组】花生采摘

    核心思想:

    1、本题为贪心即可。
    2、因为本题严格限制了顺序,所以先把每个节点的花生数量按降序排序。然后逐一判断下一个花生是否需要去采摘即可
    在这里插入图片描述

    3、每一次采摘完,记录耗时 t 以及采集的花生总数 ans。同时考虑排序后的下一个节点,如果采摘后返回路边时间足够,则执行下一次采摘;如果采摘后来不及返回路边,则不再进行下一次采摘,本次直接返回路边即可。
    4、注意,第一次是否需要采摘可进行特判。for 循环中从花生第二多的节点开始

    题解代码:
    #include 
    using namespace std;
    
    const int N = 405;
    
    struct Node
    {
        int x, y;  // 第x行,第y列
        int n;     // 的花生数量为n
    };
    Node node[N];
    
    bool cmp(Node a, Node b)
    {
        return a.n > b. n;  // 降序排序
    }
    
    int m, n, k, cnt=0; // cnt用于记载node的数量
    
    int main()
    {
        scanf("%d %d %d", &m, &n, &k);
        for(int i = 1; i <= m; i++)
            for(int j = 1; j <= n; j++)
            {
                node[++cnt].x = i;  // 存储行
                node[cnt].y = j;    // 存储列
                scanf("%d", &node[cnt].n); // 存储花生数量
            }
    
        sort(node + 1, node + 1 + cnt, cmp);  // 对所有的节点按照n进行降序排序
    
        if(2 * node[1].x + 1 > k)  // 如果采集第一次就无法返回,则输出0
        {
            printf("0\n");
            return 0;
        }
    
        int t = node[1].x + 1; // 如果第一次采集时间足够,则用t记录第一次采集已经耗费的时间,记得要把采摘的+1时间也算上
        int ans = node[1].n;    // ans记录已经采集的花生总数
        for(int i = 2; i <= cnt; i++)
        {   // 如果从当前i-1到下一个i,时间不足以完成走路+采摘+回到路边,则到此结束
            if(t + abs(node[i].x - node[i-1].x) + abs(node[i].y - node[i-1].y) + 1 + node[i].x > k)
                break;
            else  // 如果从当前i-1到下一个i时间够,则,采摘第i个
            {
                t += abs(node[i].x - node[i-1].x) + abs(node[i].y - node[i-1].y) + 1; // 更新耗费时间t
                ans += node[i].n;  // 更新采摘数量 ans
            }
        }
    
        printf("%d\n", ans);
        return 0;
    }
    
  • 相关阅读:
    京东JD开放平台API接口调用采集商品详情数据获取商品规格信息、销量、卖家信息抓取案例
    Android系统编译优化:使用Ninja加快编译
    centos下的yum安装出现的问题
    hook io异常注入
    大数据必学Java基础(十六):赋值运算符
    Maven入门
    【NodeJs入门学习】node服务环境搭建
    CMU 15-445 Project 0 实现字典树
    文档管理软件将办公室的业务模式转变为无纸化远程业务模式,提高员工生产力和保留率
    Kylin (六) --------- 查询性能优化
  • 原文地址:https://blog.csdn.net/weixin_40252159/article/details/139486328
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号