当前位置: 首页 > news >正文

网站建设技术和销售工资莱芜seo

网站建设技术和销售工资,莱芜seo,实验一html静态网站开发,汽车之家手机版网页toc 题目描述 给定一个数组 arr,数组中的每个值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张。再给定一个目标金额 aim,要求找出组成 aim 的最少货币数。如果无法组成 aim,则返回 -1。 数据范围…

@toc

题目描述

给定一个数组 arr,数组中的每个值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张。再给定一个目标金额 aim,要求找出组成 aim 的最少货币数。如果无法组成 aim,则返回 -1

数据范围

  • 数组大小满足 (0 \leq n \leq 10000)
  • 数组中每个数字满足 (0 < val \leq 10000)
  • 目标金额满足 (0 \leq aim \leq 5000)

要求

  • 时间复杂度 (O(n \times aim))
  • 空间复杂度 (O(aim))

示例

示例1

输入

[5, 2, 3], 20

返回值

4

说明

  • 使用 4 张货币(5 + 5 + 5 + 5)可以组成 20。

示例2

输入

[5, 2, 3], 0

返回值

0

说明

  • 目标金额为 0,不需要任何货币。

示例3

输入

[3, 5], 2

返回值

-1

说明

  • 无法用给定的货币组成 2。

参考视频

题解

动态规划

我们可以使用动态规划来解决这个问题。设 dp[i] 表示组成金额 i 所需的最少货币数。状态转移方程如下:

  1. 对于每个金额 i,遍历所有货币面值 arr[j]
  2. 如果 i >= arr[j],则 dp[i] = min(dp[i], dp[i - arr[j]] + 1)

边界条件

  • dp[0] = 0,表示组成金额 0 不需要任何货币。
  • 其他 dp[i] 初始化为一个较大的值(如 5001),表示暂时无法组成该金额。

代码实现

#include <stdio.h>
#include <stdlib.h>/*** 动态规划求解最少货币数* * @param arr int整型一维数组,表示货币的面值* @param arrLen int,表示货币数组的长度* @param aim int整型,表示目标金额* @return int整型,表示组成目标金额的最少货币数,如果无法组成则返回-1*/
int minMoney(int* arr, int arrLen, int aim) {// 分配动态规划数组,dp[i] 表示组成金额 i 所需的最少货币数int* dp = (int*)malloc((aim + 1) * sizeof(int));if (dp == NULL) {printf("Memory allocation failed\n");exit(1);}// 初始化动态规划数组,将所有值设置为一个较大的数(5001,因为题目中 aim 最大为 5000)for (int i = 0; i <= aim; i++) {dp[i] = 5001;}// 组成金额 0 所需的货币数为 0dp[0] = 0;// 动态规划计算每个金额的最少货币数for (int i = 1; i <= aim; i++) {for (int j = 0; j < arrLen; j++) {// 如果当前金额 i 大于等于货币面值 arr[j],以防止dp[i - arr[j]]越界if (i >= arr[j]) {// 如果 dp[i - arr[j]] 是有效的(不是初始值 5001)if (dp[i - arr[j]] != 5001) {// 更新 dp[i] 为 dp[i - arr[j]] + 1 和当前 dp[i] 的最小值dp[i] = (dp[i] < dp[i - arr[j]] + 1) ? dp[i] : dp[i - arr[j]] + 1;}}}}// 如果 dp[aim] 仍然是初始值 5001,表示无法组成金额 aim,返回 -1int result = (dp[aim] == 5001) ? -1 : dp[aim];// 释放动态规划数组free(dp);// 返回结果return result;
}int main() {int arr[] = {5, 2, 3}; // 货币面值数组int arrLen = 3;        // 货币面值数组的长度int aim = 20;          // 目标金额int result = minMoney(arr, arrLen, aim); // 调用函数计算最少货币数printf("Minimum number of coins: %d\n", result); // 打印结果return 0;
}

复杂度分析

  • 时间复杂度:(O(n \times aim)),其中 (n) 是货币数组的长度,aim 是目标金额。我们需要遍历每个金额和每种货币面值。
  • 空间复杂度:(O(aim)),用于存储动态规划数组 dp

总结

本题通过动态规划的方法,将问题分解为子问题,逐步求解。通过状态转移方程,我们可以高效地计算出组成目标金额的最少货币数。如果无法组成目标金额,则返回 -1

http://www.cadmedia.cn/news/12160.html

相关文章:

  • 网站建设和web前端一样吗百度一下你就知道搜索引擎
  • 网站制作需要多少费用排名优化公司哪家好
  • 新疆建设厅官网深圳seo排名哪家好
  • 软件公众号开发seo关键词排名优化如何
  • 建设网站招标文件新能源汽车公司
  • 机票便宜网站建设石家庄新闻网
  • 天津建设部网站首页网络营销典型案例
  • 衣柜推拉门图案设计网站seo商学院
  • 苍山网站建设网络营销与策划试题及答案
  • 建一个网站的技术解决方案google搜索排名优化
  • 邢台县教育局五库建设网站枸橼酸西地那非片
  • 网站平台建设投资费用清单我想接app纯注册推广单
  • 专门做租房的网站又一病毒来了比新冠可怕
  • 萝岗营销型网站建设上海好的seo公司
  • 镇江网站建设公司产品推广渠道有哪些方式
  • 做五金上哪个网站推广想开广告公司怎么起步
  • 深圳网站建设 湖南岚鸿安卓优化大师app
  • 客户关系管理案例经典seo的含义是什么意思
  • 网站的音乐怎么做的天津seo推广
  • 电子商务网站建设实训需求分析南京seo优化
  • 与网站建设有关的招标文件宁波网站推广哪家公司好
  • 网站建设定制开发价格如何在百度上投放广告
  • 政府门户网站信息建设自查百度新闻发布平台
  • 成品网站w灬源码1688永久网站百度seo找哪里
  • 怎么给网站建设提建议网络营销策略方案
  • 政府网站建设加强组织流量购买网站
  • 跨境网站有哪些网站开发一般多少钱
  • 中山做网站联系电话正规软件开发培训学校
  • 网站的下拉列表怎么做的软服业营收破334亿
  • 设计网站需要多少钱百度ai营销中国行