【备战秋招】每日一题:4月23日美团春招第三题:题面+题目思路 + C++/python/js/Go/java带注释

news2024/11/16 19:48:50

为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第三题-农村大亨

在线评测链接:P1247

题目内容

塔子哥是一个喜欢种田类的游戏的人,他觉得这样的游戏可以让他体验到农民的乐趣,同时也可以锻炼他的经营能力。他最近在玩一个叫做“农场大亨”的游戏,这个游戏的目的是在有限的时间内赚尽可能多的钱。游戏中有 n 种作物,每种作物都有自己的特点,比如生长周期、种子成本、作物收益等。塔子哥需要根据这些信息,合理地安排自己的种植计划,以达到最大化利润的目标。

塔子哥只有一块土地,也就是说每个时间只能由一个作物在生长。他需要在游戏开始时购买种子,然后种植在土地上。种子的买入价格为 a_i ,作物卖出价格 b_i 。一个种子只会产出一个作物,种子可以重复购买。第 i 种作物从种植到作物成熟采摘需要 t_i 天时间,种植和采摘、卖出等操作不耗时间,成熟之前作物没有价值。如果塔子哥想要更换作物,他需要先把当前作物采摘卖出,然后再购买新的种子。

游戏内总时长为 m 天,也就是说塔子哥只有 m 天的时间来经营自己的农场。塔子哥初始的钱足够多,不用担心资金不足。塔子哥想知道,在这样的条件下,他最多能赚多少钱。

输入描述

第一行两个整数 n ,m (1 \leq n , m \leq 1000)表示作物种类数和游戏时长;

第二行 n 个正整数,表示每种作物的成熟时长 t_i(1 \leq t_i \leq m)

第三行 n 个正整数,表示每种作物的种子价格 a_i(1 \leq a_i \leq 100000)

第四行 n 个正整数,表示每种作物的卖出价格b_i(a_i \leq b_i \leq 100000)

输出描述

输出一个整数来表示塔子哥最多能赚的钱。

样例1

输入

3 12
3 4 7
9 3 2
11 6 11

输出

12

样例解释

赚钱最多的方案是先种一个第二种作物,然后种一个第三种作物,耗时 4+7=11 天,赚的钱数为 6-3+11-2=12 ,可以证明这是最优的方案。

样例2

输入

10 100
81 21 66 63 48 25 23 88 71 65
56 12 94 57 57 6 37 63 87 64
62 68 99 93 88 96 47 65 97 69

输出

360

思路

动态规划-完全背包

对于每种作物,如果种下之后不收获,那么这段时间就是会被浪费的,所以每种作物我们考虑其赚的钱和需要付出的时间。 同时可以重复种同一种作物,那么这就是一个完全背包问题。总游戏时长就是背包容量,单个作物从种下种子到收获卖出的时间就是物品体积,赚到的钱就是物品的价值。

知识点学习

1.动态规划(dp)入门 by 一只会code的小金鱼

推荐理由:由浅入深,从dfs -> 记忆化搜索 -> 动态规划 的思路来讲解dp。也是公认的比较符合人类思维的理解dp的过程。

2.闫氏DP分析法

推荐理由:一套固定的分析动态规划的模式,清晰易懂。掌握这套分析法,可以解决更复杂的dp问题

3.背包九讲专题 by yxc

推荐理由:配合闫氏DP分析法,可以很好的掌握几大背包问题。

4.[算法竞赛入门] 容斥原理与组合计数 (蒋炎岩)

推荐理由:数学观点(集合论+组合数学)下的动态规划。

类似题目推荐

虽然有这么多学习视频,但是动态规划的分析也十分依赖经验 。所以一定一定要多刷题

Leetcode

代码随想录 - 动态规划专题

CodeFun2000

1.P1178. 2023.04.09-小红书春招-第二题-融合试剂 -类背包问题

2.P1212. 塔子大厂真题模拟赛-第二题-魔法石(Ⅱ) - 分组背包

3.P1025. 2022.11.9-华为秋招-攻城战 - 分组背包

4.P1090. 2023.3.18.10点-美团-第四题-提瓦特商店 -二维背包

更多大厂考察动态规划的真题见知识点分类训练 中的动态规划转题

代码

CPP

#include <bits/stdc++.h>
using namespace std;
​
const int N = 1010, M = 1010;
int f[M];
int n, m;
int v[N], w[N];
​
int main()
{
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; ++i) scanf("%d", &v[i]);
    for (int i = 1; i <= n; ++i) scanf("%d", &w[i]);
    for (int i = 1; i <= n; ++i) {
        int x; scanf("%d", &x);
        w[i] = x - w[i];
    }
​
    for (int i = 1; i <= n; ++i)
        for (int j = v[i]; j <= m; ++j) {
            f[j] = max(f[j], f[j - v[i]] + w[i]);
        }
​
    printf("%d\n", f[m]);
​
    return 0;
}

Java

import java.util.Scanner;
​
public class Main {
    static final int N = 1010, M = 1010;
    static int[] f = new int[M];
    static int[] v = new int[N];
    static int[] w = new int[N];
​
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        for (int i = 1; i <= n; ++i) v[i] = sc.nextInt();
        for (int i = 1; i <= n; ++i) w[i] = sc.nextInt();
        for (int i = 1; i <= n; ++i) {
            int x = sc.nextInt();
            w[i] = x - w[i];
        }
​
        for (int i = 1; i <= n; ++i) {
            for (int j = v[i]; j <= m; ++j) {
                f[j] = Math.max(f[j], f[j - v[i]] + w[i]);
            }
        }
​
        System.out.println(f[m]);
    }
}

Python

N, M = 1010, 1010
f = [0] * M
​
n, m = map(int, input().split())
v = list(map(int, input().split()))
w = list(map(int, input().split()))
w2 = list(map(int, input().split()))
for i in range(0, n):
    w[i] = w2[i] - w[i]
for i in range(0, n):
    for j in range(v[i], m+1):
        f[j] = max(f[j], f[j - v[i]] + w[i])
​
print(f[m])

Go

package main
​
import "fmt"
​
func main() {
    M := 1010
    f := make([]int, M)
​
    var n, m int
    fmt.Scan(&n, &m)
    v := make([]int, n)
    for i := 0; i < n; i++ {
        fmt.Scan(&v[i])
    }
    w := make([]int, n)
    for i := 0; i < n; i++ {
        fmt.Scan(&w[i])
    }
    w2 := make([]int, n)
    for i := 0; i < n; i++ {
        fmt.Scan(&w2[i])
    }
    for i := 0; i < n; i++ {
        w[i] = w2[i] - w[i] 
    }
    for i := 0; i < n; i++ {
        for j := v[i]; j <= m; j++ {
            f[j] = max(f[j], f[j-v[i]]+w[i])
        }
    }
​
    fmt.Println(f[m])
}
​
func max(x, y int) int {
    if x > y {
        return x
    }
    return y
}

Js

process.stdin.resume();
process.stdin.setEncoding('utf-8');
let input = '';
process.stdin.on('data', (data) => {
    input += data;
    return;
});
process.stdin.on('end', () => {
    const lines = input.trim().split('\n');
    var [N , M] = [1010 , 1010];
    var f = new Array(M).fill(0);
    var [n , m] = lines[0].split(' ').map(Number);
    var v = lines[1].split(' ').map(Number);
    var w = lines[2].split(' ').map(Number);
    var w2 = lines[3].split(' ').map(Number);

    for (var i = 0 ; i < n ; i++) w[i] = w2[i] - w[i];
    for (var i = 0 ; i < n ; i++){
        for (var j = v[i] ; j <= m ; j++){
            f[j] = Math.max(f[j] , f[j - v[i]] + w[i])
        }
    }
    console.log(f[m]);
})

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

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

相关文章

MYSQL中 find_in_set() 函数用法详解

MYSQL中 find_in_set() 函数用法详解 官方涵义&#xff08;MySQL手册中语法说明&#xff09; FIND_IN_SET(str,strlist) &#xff1a; str 要查询的字符串&#xff0c;strlist 需查询的字段&#xff0c;参数以”,”分隔&#xff0c;形式如 (1,2,6,8,10,22)&#xff1b;该函数的…

分布式存储与并行处理环境配置:Hadoop、HBase和Spark等

本文介绍Linux系统中配置Hadoop、HBase和Spark环境&#xff0c;包括安装Java运行环境、下载安装包、进行配置和测试。通过这种方式&#xff0c;可以搭建一个强大的分布式计算环境&#xff0c;用于处理大规模数据集。为了成功配置Hadoop、HBase和Spark环境&#xff0c;需要理解它…

chatgpt赋能python:Python实现输出在同一行的技巧

Python实现输出在同一行的技巧 介绍 在Python中&#xff0c;我们经常需要将一些文本或者变量输出到控制台上&#xff0c;以便查看或者进行交互式调试。但是默认情况下&#xff0c;每次输出都会换行展示&#xff0c;这在某些情况下可能会让输出显得比较混乱&#xff0c;尤其是…

Ubuntu安装及使用教程

Ubuntu安装及使用教程 一、基本介绍二、vmware下安装ubuntu系统三、ubuntu系统使用 回到目录   回到末尾 一、基本介绍 对于ubuntu而言&#xff0c;就是linux操作系统的具体&#xff0c;而linux对于ubuntu来说就是他的抽象&#xff1b;在linux操作系统中&#xff0c;因为应用…

SSD202D-挂载根文件系统

参考链接: 启明云端分享|SSD20X 如何使用SD卡根文件系统_sudo./make_sd.sh_启明智显的博客-CSDN博客 启明云端分享|SSD202D核心板使用NFS_lx_mem=0x3f00000 mma_heap=mma_heap_name0,miu=0,sz=_启明智显的博客-CSDN博客 然后思路: 1.要在kernel打开文件系统格式支持 CONFIG_…

chatgpt赋能python:Python计算圆面积方法教程

Python计算圆面积方法教程 你是否想过如何用Python计算圆面积&#xff1f;圆形是一个基本的几何形状&#xff0c;计算圆的面积是一个必要的技能。Python作为一种流行的编程语言&#xff0c;可以帮助我们更轻松地计算圆的面积。本教程将介绍如何使用Python计算圆的面积。 什么…

【Red Hat7.9安装Oracle11g--调用图形化界面的几种方式】

【Red Hat7.9安装Oracle11g--调用图形化界面的几种方式】 &#x1f53b; 一、续上一篇[【Red Hat 7.9---详细安装Oracle 11g---图形化界面方式】](https://blog.csdn.net/qq_41840843/article/details/131198718?spm1001.2014.3001.5501)⛳ 1.1 前言⛳ 1.2 方式一、使用Xmanag…

Mock和Vite-plugin-Mock的区别是什么?

简介 我不知道大家和我是否有一样的疑问&#xff0c;之前Mock.js用的挺好&#xff0c;为啥又出现了一个vite-plugin-mock,而且这个插件还依赖于Mock.js.那么他的优势到底是什么呢&#xff1f;如果你也有这样的疑问&#xff0c;本文最后会给出答案解开这个谜底 前言 我之前已经…

6月更新——企业互联,搭建起企业与企业之间的业务桥梁

企业互联 企业互联的作用是促进企业之间的合作和交流&#xff0c;提高企业的运营效率和竞争力。具体来说&#xff0c;企业互联可以实现以下几个方面的作用&#xff1a; 信息共享&#xff1a; 通过企业互联&#xff0c;企业可以方便地实现内部和外部信息的共享和传递。这样可…

chatgpt赋能python:Python装pipinstall的方法

Python装pip install的方法 如果你是一个Python开发者&#xff0c;那么你一定需要一些第三方库来辅助你完成一些任务。而pip就是Python的包管理器&#xff0c;它可以让你很方便地安装和管理第三方库。但是&#xff0c;在使用pip之前&#xff0c;我们需要先安装它。 什么是pip…

1.OpenStack介绍及环境部署(PS笔记)

当面对KVM集群的时候&#xff0c;我们对KVM的管理以及宿主机的管理就会遇到很大的难度&#xff0c;例如&#xff1a; 查看每一个宿主机有多少台KVM虚拟机? 查看每一个宿主机资源信息&#xff0c;每一个KVM虚拟机资源信息?查看每一台宿主机配置信息&#xff0c;每一个KVM虚拟机…

C#异步详解

异步编程是指在程序执行过程中&#xff0c;不需要等待某个操作完成&#xff0c;就可以继续执行后续的代码。比如我们开发了一个web页面中有一个上传文件功能&#xff0c;我们上传文件时使用异步操作&#xff0c;就不用等待文件的上传时间&#xff0c;可以先在网页上进行其他操作…

Linux 命令(9)—— top

文章目录 1、命令简介2、使用方法3、命令行参数4、显示摘要5、进程列表字段6、交互命令a、全局命令b、摘要区域命令c、任务区域命令d、颜色映射e、可选显示窗口 7、配置文件a、系统配置文件b、个人配置文件 1、命令简介 top提供运行系统的动态实时视图。它可以显示系统摘要信息…

RK3399平台开发系列讲解(Pinctrl子系统)pinctrl的使用

平台内核版本安卓版本RK3399Linux4.4Android7.1🚀返回专栏总目录 文章目录 一、配置 pinctrl二、调用 pinctrl2.1、Iomux 配置2.2、驱动强度配置2.3、上下拉配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍pinctrl设备树的使用方法。 一、配置 pinctr…

牛客网专项练习——C语言错题集(6)

文章目录 数组地址的移位C 源程序和函数的关系二维数组值的表示方式&#xff08;n & (n-1)) 0容易出错的 位运算fseek 可以实现的操作 数组地址的移位 个人理解&#xff1a; 这题的 A C 选项的差别应该在优先级上&#xff08;下文有 C 语言运算符优先级表&#xff09;&am…

移动端测试-Adb工具

移动端测试_Adb工具 Adb的基本使用简要介绍通用操作步骤一、连接设备二、断开设备三、安装四、卸载五、抓取日志六、文件传输七、截屏八、清除apk缓存九、查看终端各apk占用内存 Adb的基本使用 简要介绍 adb其实就是移动端的调试工具&#xff0c; 全称为Android Debug Bridge…

chatgpt赋能python:Python设置画笔粗细:从入门到精通

Python设置画笔粗细&#xff1a;从入门到精通 在Python中&#xff0c;画图是非常常见的操作。设置画笔的粗细是其中的一个重要部分。本文将从最基础的设置粗细开始讲起&#xff0c;逐步深入&#xff0c;带您了解Python设置画笔粗细的各种方法。 一、使用pensize()函数 pensi…

【备战秋招】每日一题:5月13日美团春招第三题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第三题-火车调度 在线评测链接:P1288 题目描述 塔子哥是一位火车车厢调度员。 这一天&#xff0c;一列带有 n 个编号车厢的列车进站了&#xff0c;编号为 1\rightarrow …

【瑞萨RA_FSP】GPT—— 通用PWM定时器

文章目录 一、PWM简介二、GPT简介三、GPT的框图分析1. 计数器2. 周期设置和周期设置缓冲寄存器3. 时钟输入4. 控制寄存器5. 比较器和比较/输入捕获寄存器6. 中断请求信号7. IO输入输出引脚8. ELC事件输入9. 输出相位切换 一、PWM简介 PWM 的全称是脉冲宽度调制&#xff08;Pul…

chatgpt赋能python:如何安装PyQt5

如何安装PyQt5 Python是现在最受欢迎的编程语言之一。Python与它的第三方库使得开发者能够在不同的领域中编写高质量的代码。因此&#xff0c;Python已经成为了许多开发者的首选之一&#xff0c;而PyQt5则是Python中使用最多的图形界面开发工具之一。在这篇文章中&#xff0c;…