算法设计 || 第5题:钓鱼问题-北京大学网站在线算法题(贪心算法)

news2024/11/26 10:37:41

目录

(一)题目网址+视频网址 

(二)手写草稿思考

Part1: 慕课PPT

 Part2: 笨蛋的学习


(一)题目网址+视频网址 

北京大学网站在线算法题:1042 -- Gone Fishing (poj.org)

视频讲解(北京大学附郭炜教授) :程序设计与算法(二)算法基础_北京大学_中国大学MOOC(慕课) (icourse163.org)

(二)手写草稿思考

Part1: 慕课PPT

老师的视频讲解,发现老师好可爱的啊!居然去旅行的时候背着旅行包拍这种推广算法的视频!

 Part2: 笨蛋的学习

 说实话,我在看完老师的视频后,依旧对题意还没有非常理解,呜呜,救救我!

一个相关的大佬分析:(372条消息) 鱼塘钓鱼 贪心算法_小王不头秃的博客-CSDN博客

然后又仔细地研究了一下题目的意思+输入输出是个啥:

 

//Molly
#include<iostream>    // 引入输入输出流库
#include<string>      // 引入字符串库
#include<map>         // 引入映射库
#include<vector>      // 引入向量库
#include<algorithm>   // 引入算法库
#include<stdio.h>     // 引入标准输入输出库
#include<cstring>     // 引入字符串库
#include<stdlib.h>    // 引入标准库
#include<sstream>     // 引入字符串流库
#include<set>         // 引入集合库
#include<cmath>       // 引入数学库

// 定义 long long 类型为 n
typedef long long n;

using namespace std;

// 定义结构体,储存每个湖的鱼数以及每个时间片钓鱼的情况
struct node1
{
    int fishnum; // 鱼的数量
    int time[30]; // 每个时间片钓鱼情况
};

// 定义结构体,储存每次钓鱼的湖泊编号、时间片数以及鱼的数量
struct node2
{
    int F; // 鱼的数量
    int no; // 湖泊编号
    int k; // 时间片数
};

// 定义排序规则,按照鱼的数量从大到小排序,用于 node1 结构体的排序
struct rule1
{
    bool operator()( const node1 &t1,const node1 &t2)
    {
        return t1.fishnum>t2.fishnum;
    }
};

// 定义排序规则,按照鱼的数量从大到小排序,用于 node2 结构体的排序
struct rule2
{
    bool operator()(const node2 &t1,const node2 &t2)
    {
        return t1.F>t2.F;
    }
};

int maxfish; // 最大的鱼数

int main()
{
    ios::sync_with_stdio(false); // 关闭同步流,提高输入输出速度
    int n; // 湖泊的数量
    while(cin>>n&&n) // 不断输入湖泊数量,直到输入 0 结束
    {
        node1 a[30]; // 定义 node1 数组,储存每个湖的钓鱼情况
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
                a[i].time[j]=0;
        }
        int h; // 每个时间片的时长
        maxfish=0; // 最大鱼数初始化为 0
        int f[30]; // 每个湖泊的初始鱼数
        int d[30]; // 每个湖泊每次钓鱼能够得到的鱼数
        int t[30]; // 到达每个湖泊需要的时间
        
        cin>>h;
        for(int i=1;i<=n;i++) cin>>f[i]; // 输入每个湖泊的初始鱼数
        for(int i=1;i<=n;i++) cin>>d[i]; // 输入每个湖泊每次钓鱼能够得到的鱼数
        t[0]=0; // 到达第一个湖的时间为 0
        for(int i=1;i<n;i++) cin>>t[i]; // 输入到达每个湖泊所需的时间
        int k=0; // 定义时间片个数
        for(int x=1;x<=n;x++) // 枚举最终停下来的湖
        {
            int walktime=0; // 走路用的时间片
            for(int j=1;j<x;j++)
                walktime+=t[j];
            k=h*12-walktime; // 根据题意计算可用的时间片数
            node2 m[5000]; // 定义 node2 数组,储存所有的钓鱼情况
            int kase=0; // 钓鱼情况的数量
            int number=0; // 钓鱼得到的鱼数
            for(int i=1;i<=x;i++)
                for(int j=1;j<=k;j++)
                {
                    number=f[i]-(j-1)*d[i]; // 计算钓鱼得到的鱼数
                    if(number>0)
                    {
                        m[kase].F=number; // 储存鱼的数量
                        m[kase].no=i; // 储存湖泊编号
                        m[kase].k=j; // 储存时间片数
                        kase++;
                    }
                    else
                    {
                        m[kase].F=0; // 鱼的数量为 0
                        m[kase].no=i; // 储存湖泊编号
                        m[kase].k=j; // 储存时间片数
                        kase++;
                    }
                }
            stable_sort(m,m+kase,rule2()); // 对 m 数组进行排序
            int num=0; // 钓鱼得到的总鱼数
            for(int i=0;i<k;i++)
                num+=m[i].F;
            a[x].fishnum=num; // 储存钓鱼得到的总鱼数
            for(int i=0;i<k;i++)
            {
                for(int j=1;j<=x;j++)
                {
                    if(m[i].no==j)
                    {
                        if(m[i].k>a[x].time[j])
                            a[x].time[j]=m[i].k;
                    }
                }
            }
        }
        sort(a+1,a+1+n,rule1()); // 对 a 数组进行排序
        for(int i=1;i<=n;i++)
        {
            if(i==n)
                cout<<a[1].time[i]*5<<endl; // 输出最短时间
            else
                cout<<a[1].time[i]*5<<", ";
        }
        cout<<"Number of fish expected: "<<a[1].fishnum<<endl<<endl; // 输出钓鱼得到的总鱼数
    }
    return 0; // 程序结束
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/525378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进一步了解傅里叶变换的应用(附案例代码)

傅里叶变换&#xff08;Fourier Transform&#xff09;是一种非常常见的数学工具&#xff0c;能够将一个函数&#xff08;或时域信号&#xff09;分解成一些基本频率的合成。它使我们可以将时域信号&#xff08;例如波形图&#xff09;转换成频域信号&#xff0c;因而更容易地看…

ArcGIS按比例缩放图斑

今天介绍一下&#xff0c;在ArcGIS中&#xff0c;当我们需要按比例缩放图斑时&#xff0c;该如何操作呢。 可以使用“缩放”工具对要素进行缩放&#xff08;使整个要素变大或变小&#xff09;。在处理比例略有误差的数据&#xff08;例如&#xff0c;来自多个源的细分宗地&…

ChatGPT背后的大预言模型 以及《ChatGPT全能应用一本通》介绍

大型语言模型已经彻底改变了我们通过自然语言处理进行交互的方式&#xff0c;使得更多的基于语言的应用程序成为可能&#xff0c;例如语言翻译&#xff0c;问答&#xff0c;文本摘要和聊天机器人。 由于这些模型是在大量文本数据集&#xff08;如书籍&#xff0c;文章和社交媒…

C learning_13 操作符前篇(条件操作符、 逗号表达式、 下标引用、函数调用和结构成员、 表达式求值)

目录 条件操作符 逗号表达式 下标引用、函数调用和结构成员 1. [ ] 下标引用操作符 2. ( ) 函数调用操作符 3. 访问一个结构的成员 表达式求值 1.隐式类型转换 2.算术转换 3.操作符的属性 条件操作符 条件操作符是一种用于简化条件表达式的运算符。它通常表示为问号 …

《游戏编程模式》--重访设计模式--学习

序 在线阅读地址&#xff1a; 命令模式 Design Patterns Revisited 游戏设计模式 (tkchu.me) 参考文章&#xff1a; GameDesignPattern_U3D_Version/Assets/002FlyweightPattern at master TYJia/GameDesignPattern_U3D_Version GitHub 看到了没见过的观点&#xff1a;…

我的算法基础实验代码-下篇

第一题 题目介绍 输入一些数值&#xff0c;求出现的次数最多的数。如果有多个并列&#xff0c;则从大到小输出。 解题思路 代码实现 package com.nineWeek;import java.util.*;/*** author WangYH* version 2021.1.3* date 2023/5/7 18:29*/public class NumMostTimes {pu…

第十四届蓝桥杯b组c/c++

D:飞机降落&#xff08;全排列&#xff09; #include<iostream> #include<cstring> using namespace std;const int N 12; int n; struct node{int t, d, l; //t为此飞机的最早降落时间 d为盘旋时间 l为降落所需时间 }p[N]; bool st[N];//DFS求全排列模型 bool d…

【真题解析】系统集成项目管理工程师 2021 年下半年真题卷

本文为系统集成项目管理工程师考试(软考) 2021 年上半年真题&#xff0c;包含答案与详细解析。考试共分为两科&#xff0c;成绩均 ≥45 即可通过考试&#xff1a; 综合知识&#xff08;选择题 75 道&#xff0c;75分&#xff09;案例分析&#xff08;问答题 4 道&#xff0c;75…

ChatGPT 学习与使用总结

ChatGPT 学习与使用总结 最近ChatGPT大火&#xff0c;2023有可能就是AGI元年了。近两个月使用下来&#xff0c;ChatGPT给我最深刻的感觉就是它所具备的理解和思维能力&#xff0c;第一次体验时真的是非常震撼&#xff0c;完全是之前各种『人工智障』智能助理所不能比拟的&…

Windows系统出现蓝屏怎么办?这些方法可以修复!

Windows 系统蓝屏死机&#xff08;BSOD&#xff09;&#xff0c;也被称为“停止错误”&#xff0c;是Windows系统最常见的故障之一。 当Windows遇到严重的故障时就会显示蓝屏&#xff0c;系统崩溃。蓝屏上显示一个停止代码&#xff0c;如"MEMORY_MANAGEMENT"&#xf…

NeRF与三维重建专栏(一)领域背景、难点与数据集介绍

前言 关于该系列专栏&#xff0c;主要介绍NeRF在三维重建中的应用&#xff08;这里我们特指MVS&#xff0c;multi-view stereo&#xff0c;也即输入带位姿的图片&#xff0c;输出三维结构例如点云、mesh等&#xff1b;并且后面的工作也都是围绕MVS with NeRF讨论的。虽然也有w…

人类与ChatGPT:互动中的共同进步

一、ChatGPT的发展历程 1. GPT模型 ChatGPT是由OpenAI推出的一款聊天机器人&#xff0c;其核心技术基于GPT模型。GPT模型&#xff08;Generative Pre-training Transformer&#xff09;是一种基于Transformer结构的预训练语言模型。它在大规模的文本语料库上进行无监督的预训…

解析 ip addr 的输出的内容含义

解读 ip addr 的输出的网络连接信息含义 一、ifconfig 与 ip addr 用过Linux的读者都知道&#xff0c;在Linux查看ip可以使用ifconfig&#xff0c;当然这个ifconfig属于net-tools 工具集&#xff0c;其来源于BSD&#xff0c;Linux从2001年就不对其进行维护了。那我们应该用什…

基于下垂控制的并网逆变器控制MATLAB仿真模型

资源地址&#xff1a; 基于下垂控制的并网逆变器控制MATLAB仿真模型资源-CSDN文库 主要模块&#xff1a; 建议使用MATLAB2021b及以上版本打开&#xff01; 功率计算模块、下垂控制模块、电压电流双环控制模块、虚拟阻抗压降模块 扰动设置&#xff1a; 在0.5秒到2秒始端设置…

微软出品的实用小工具

微软出品的实用小工具 分享一些微软出品的实用小工具&#xff0c;希望对大家有所帮助。 文章目录 微软出品的实用小工具SysinternalsSuite常用工具AutorunsprocdumpProcess Explorer进程监视器 Process MonitorpsloggedonAccessChk示例 PsToolsrdcmanTcpviewVmmap Sysinternals…

数据结构_树与二叉树

目录 1. 树的基本概念 1.1 树的定义 1.2 基本术语 1.3 树的性质 1.4 相关练习 2. 二叉树的概念 2.1 二叉树的概念及其主要特性 2.2 二叉树的存储结构 2.2.1 顺序存储结构 2.2.2 链式存储结构 2.3 相关练习 3. 二叉树的遍历和线索二叉树 3.1 二叉树的遍历 3.1.1 先…

基于微信小程序校内论坛系统

开发工具&#xff1a;IDEA、微信小程序 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 前端技术&#xff1a;vue、uniapp 服务端技术&#xff1a;springbootmybatis-plus 本系统分微信小程序和管理后台两部分&a…

神马网络——IP地址

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。个人主页&#xff1a;小李会科技的…

ChatGPT提示词技巧

自计算机问世以来&#xff0c;人类与计算机之间的交互方式已经经历过几个重要的阶段&#xff1a; 指令式交互&#xff08;Command-based Interaction&#xff09; 早期的计算机系统主要采用了指令式交互方式&#xff0c;用户需要输入特定的命令或代码来完成各种任务。这种交…

软件与硬件的联调之小程序与云平台相互通信

软件与硬件的联调之小程序与云平台相互通信 本人专注使用云开发&#xff0c;实现一个前端可以做后端以及整个项目的部署与上线。 如果觉得我讲的好就可以给我点个赞。 #mermaid-svg-xJRh48GCcG2gzlqz {font-family:"trebuchet ms",verdana,arial,sans-serif;font-si…