牛客题解 | 外卖满减

news/2025/3/4 11:05:01/文章来源:https://www.cnblogs.com/wc529065/p/18750087

题目

题目链接

解题思路

使用动态规划求解:

  1. 状态定义:\(dp[i][j]\) 表示前 \(i\) 个菜品中,是否能凑出总价 \(j\)
  2. 状态转移:
    • 不选第 \(i\) 个菜:\(dp[i][j] = dp[i-1][j]\)
    • 选第 \(i\) 个菜:\(dp[i][j] = dp[i-1][j-prices[i]]\)
  3. 从满足条件的最小价格开始向上找第一个可以凑出的价格

代码

def solve():# 读取输入n, x = map(int, input().split())prices = list(map(int, input().split()))# 初始化dp数组dp = [[False] * 10001 for _ in range(n + 1)]dp[0][0] = True# 动态规划for i in range(n):for j in range(10001):# 不选第i个菜dp[i + 1][j] = dp[i][j]# 选第i个菜if j >= prices[i]:dp[i + 1][j] |= dp[i][j - prices[i]]# 从满足条件的最小价格开始找for total in range(x, 10001):if dp[n][total]:print(total)breakif __name__ == "__main__":solve()
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 读取输入int n = sc.nextInt();int x = sc.nextInt();int[] prices = new int[n];for (int i = 0; i < n; i++) {prices[i] = sc.nextInt();}// 初始化dp数组boolean[][] dp = new boolean[n + 1][10001];dp[0][0] = true;// 动态规划for (int i = 0; i < n; i++) {for (int j = 0; j <= 10000; j++) {// 不选第i个菜dp[i + 1][j] = dp[i][j];// 选第i个菜if (j >= prices[i]) {dp[i + 1][j] |= dp[i][j - prices[i]];}}}// 从满足条件的最小价格开始找for (int total = x; total <= 10000; total++) {if (dp[n][total]) {System.out.println(total);break;}}}
}
#include <iostream>
#include <vector>
using namespace std;int main() {// 读取输入int n, x;cin >> n >> x;vector<int> prices(n);for (int i = 0; i < n; i++) {cin >> prices[i];}// 初始化dp数组vector<vector<int>> dp(n + 1, vector<int>(10001, 0));dp[0][0] = 1;// 动态规划for (int i = 0; i < n; i++) {for (int j = 0; j <= 10000; j++) {// 不选第i个菜dp[i + 1][j] = dp[i][j];// 选第i个菜if (j >= prices[i]) {dp[i + 1][j] |= dp[i][j - prices[i]];}}}// 从满足条件的最小价格开始找for (int total = x; total <= 10000; total++) {if (dp[n][total]) {cout << total << endl;break;}}return 0;
}

算法及复杂度

  • 算法:动态规划
  • 时间复杂度:\(\mathcal{O}(n \cdot M)\),其中 \(n\) 是菜品数量,\(M\) 是价格上限
  • 空间复杂度:\(\mathcal{O}(n \cdot M)\),用于存储 \(dp\)数组

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Motoman机器人XRC控制柜维修

在现代工业生产中,YASKAWA机器人扮演着至关重要的角色。然而,如同所有的机械设备一样,YASKAWA机器人也会出现故障,尤其是其控制柜部分。因此,安川机器人维修工作对于保障机器人的正常运行意义非凡,这其中安川机器人控制柜维修更是关键环节。一、常见故障及解决方法1. 电源…

【域攻击】无文件落地攻击:msiexec

msiexec.exe属于系统进程,是Windows Installer的一部分,用于安装Windows Installer安装包(MSI),对系统的正常运行非常重要,一般在运行Microsoft Update安装更新或安装部分软件的时候出现,占用内存比较大,我们亦可以使用其作为无文件落地的媒介,下面举例说明: Step 1:使…

c# hosting 和 AppDomain

前言 简单介绍一下hosting 和 appdomain。 这两个东西。 正文 我们经常听说寄宿,这个寄宿是什么东西呢? 也就是我们这里要介绍的hosting。 什么是寄宿呢? 想一个问题,一个c# 的exe 程序,为啥能够启动呢?我们记得dll中是il代码。 那么肯定要加载运行时对吧。 那么为什么叫…

Dapr 简介 - 分布式应用运行时

Dapr 简介-分布式应用运行时 简介 Whats Dapr? Dapr = Distributed Application Runtime (分布式应用运行时)看到这个词,不知道大家想到了什么?是不是类似于 java runtime,c runtime 这类词汇。网上找到了一个 应用程序、运行时库和 OS 之间的关系图,其中 Runtime 库处于…

Mac脚本发布PHP开发项目到线上

环境 服务器: CentOS Linux release 7.6.1810 (Core) 客户端: macOS Sonoma 14.1.2 (23B92) 测试环境:开发使用ftp自动上传到/www/wwwroot/dirDev文件夹自动备份并发布程序 备份/www/wwwroot/dirOnline文件夹,并将开发项目/www/wwwroot/dirDev自动同步到线上环境/www/wwwro…

Mac发布PHP开发项目到线上项目

环境 服务器: CentOS Linux release 7.6.1810 (Core) 客户端: macOS Sonoma 14.1.2 (23B92) 开发使用ftp自动上传到/www/wwwroot/dirDev文件夹自动备份并发布程序 备份/www/wwwroot/dirOnline文件夹,并将开发项目/www/wwwroot/dirDev自动同步到线上环境/www/wwwroot/dirOnli…

Windows使用技巧——查看本地ip地址

我在windows上双击一个文件,就可以直接查看我的ip地址,这是怎么做到的?步骤一:在文件夹右击,新建一个文本文档; 步骤二:双击此文档,输入以下字符:“ipconfigpause”,然后保存;步骤三:把文件重命名,把后缀更改为“bat”如下,再点“是”; 之后双击该文档,就可以…

触想对话2025智能控制与驱动发展论坛,共探中国智造新未来!

近日,由中国工控网联合SPS广州展共同举办的“2025智能控制与驱动发展论坛”在广州珠海顺利召开,触想受邀出席并发表专题演讲,围绕公司在工业物联网(IIoT)技术应用与电子制造数字化转型中的创新实践展开分享,与国内外技术专家、行业领袖及产业链代表,共同探讨中国制造的未来…

B150平台的最后一舞 CC150上机作业

简单介绍一下CC150 大船靠岸,CC150也从24年4月的五百多元逐步降价到8月的310元(个别有299),价格基本稳定了下来,性价比日益凸显。 网传这颗CC150是NVIDIA用在GeForceNow云游戏平台上的专门向Intel定制的处理器,猜测是用在虚拟化场景。这颗处理器优劣很鲜明:优点是核心数…

Qt/C++地图组件在视频监控系统中的应用/显示设备点/弹出视频画面/调整设备位置

一、前言说明 监控系统中一般有很多的摄像头点位,除了在平面图中展示位置以外,有些工地和集团,在集中管理的地方,还希望在电子地图中展示,电子地图可以缩放和拖动,切换设备点自动放大高亮,地图自动移动到设备居中的位置,双击设备可以预览实时画面。设备的经纬度信息,在…

前端常见设计模式

以下是前端开发中常见的设计模式及其核心思想、应用场景和示例,结合了多个资料源的综合总结:一、创建型模式 1. 单例模式(Singleton) • 核心思想:确保全局仅有一个实例,并提供统一访问点。 • 应用场景:全局状态管理(如 Vuex/Redux 的 Store)、配置对象、弹窗组件。 …