Timus#1005

C++【动态规划】

#include<iostream>
#include<vector>
using namespace std;
int main()
{int n;cin >> n;vector<int> dp(100000 * 20);vector<int> a(n);int ans = 0, cur = 0;for (int i = 0; i < n; i++){cin >> a[i];ans += a[i];}int sum = ans / 2;for (int i = 0; i < n; i++)for (int j = sum; j >= a[i]; j--)dp[j] = max(dp[j], dp[j - a[i]] + a[i]);cout << ans - dp[sum] * 2 << endl;return 0;
}

C【动态规划】

#include <stdio.h>
#include <stdlib.h>
#define MAXN 100000 * 20
int main()
{int n;scanf("%d", &n);int* dp = (int*)malloc(sizeof(int) * (MAXN + 1));int a[20];int sum = 0, ans = 0;for (int i = 0; i < n; i++){scanf("%d", &a[i]);ans += a[i];}sum = ans / 2;dp[0] = 0;for (int i = 0; i < n; i++)for (int j = sum; j >= a[i]; j--)dp[j] = (dp[j] > dp[j - a[i]] + a[i]) ? dp[j] : dp[j - a[i]] + a[i];printf("%d\n", abs(ans - 2 * dp[sum]));free(dp);return 0;
}

算法介绍:动态规划

        首先计算输入数组a的总和,并设定目标和为总和的一半。初始化动态规划数组 dp,其中 dp[j]表示当前考虑了部分元素后,能否组成一个和为 j 的子集。遍历数组 a,对每个元素尝试加入到满足条件的“堆”中(即更新 dp[j]),确保在所有可能的划分方案中找到使得两个堆的和相差最小的情况。最后输出原数组总和与目标和所能达到的最大价值的两倍之差,即两堆之差的最小值。

时间复杂度:o(n^2)

这段代码的时间复杂度主要取决于两个嵌套循环的执行次数。外层循环遍历输入数组 a 的所有元素,其时间复杂度为 O(n)。 内层循环对于数组中的每个元素,会从目标和 sum 开始一直减到当前元素为止,其时间复杂度在最坏情况下是 O(sum),因为对于较大的元素,内层循环可能接近于 sum 次迭代。由于在最坏情况下,sum 可以达到数组元素总和的一半,而数组元素总和与数组大小 n 相关,因此可以假设在极端情况下,sum 与 n 成正比,即 sum = O(n)。所以,总的复杂度是外层循环与内层循环复杂度的乘积,即 O(n * sum) ≈ O(n^2)。这意味着当输入数组规模增大时,算法所需的时间将以二次方的速度增长。

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

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

相关文章

C++ 求不同数组的最大值

编写一个名为max()的函数&#xff0c;用于求包含n个元素的数组的最大值&#xff0c;要求通过函数重载能求int、double、char、string的最大值。 函数接口定义&#xff1a; int max(int *a, int n) ; double max(double *a, int n) ; char max(char *a, int n); string max(str…

探索直播美颜SDK背后的深度学习算法:智能化美肤与特效实现

美颜SDK背后的技术原理和深度学习算法近期很多读者向小编提问。今天&#xff0c;我将为大家深入讲解直播美颜SDK背后的深度学习算法&#xff0c;以及智能化美肤与特效实现的原理与应用。 一、美颜SDK的背后&#xff1a;深度学习算法 美颜SDK是一种集成了多种美颜功能的软件开…

【APB协议 UVM_Sequencer Driver Monitor_2024.03.04】

apb协议 写时序 地址、写信号、PSEL、写数据信号同时发生变化&#xff0c;即传输的第一个时钟被称为SETUP周期。在下个时钟上升沿,PENABLE信号拉高&#xff0c;表示ENABLE周期&#xff0c;在该周期内&#xff0c;数据、地址以及控制信号都必须保持有效。整个写传输在这个周期…

分享几个Google Chrome谷歌浏览器历史版本下载网站

使用selenium模块的时候&#xff0c;从官网下载的谷歌浏览器版本太高&#xff0c;驱动不支持&#xff0c;所以需要使用历史的谷歌浏览器版本 &#xff0c;这里备份一下以防找不到了。 驱动下载地址&#xff1a;https://registry.npmmirror.com/binary.html?pathchromedriver 文…

WiFi贴码推广能赚钱吗?掌握WiFi贴码推广技巧

“WiFi贴码推广能赚钱吗”是当前很多创业者关注的一个话题&#xff0c;WiFi贴码推广这一新兴的商业模式&#xff0c;是指商家在其门店或者特定场所提供免费WiFi&#xff0c;不需要输入密码wifi二维码即可连接&#xff0c;连接后合作商就会获得一定的收益。这种模式既方便了用户…

【Node.js从基础到高级运用】七、基本的网络编程

基本的网络编程 在这一节中&#xff0c;我们将介绍 Node.js 在网络编程方面的基础&#xff0c;特别是如何使用 Node.js 创建一个 HTTP 服务器。这是构建 Web 应用和服务的核心技能。 创建 HTTP 服务器 Node.js 的 http 模块提供了创建 HTTP 服务器和客户端的能力。以下是创建…

白酒:陈酿过程中的理化变化与香味成分的转化

在豪迈白酒的陈酿过程中&#xff0c;理化变化和香味成分的转化是形成与众不同风味和品质的重要环节。云仓酒庄深入了解和掌握陈酿过程中的理化变化规律&#xff0c;以及香味成分的转化机制&#xff0c;通过科学的方法和精细的管理&#xff0c;提升豪迈白酒的品质和口感。 首先&…

CMake:编写 CMakeLists 文件

文章目录 编辑 CMakeLists 文件CMake 语言注释变量变量范围命令基本命令流控制条件语句循环构造过程定义正则表达式高级命令 本章将介绍编写有效 CMakeList 的基础知识 文件。它将涵盖基本命令和问题 您将需要处理大多数项目。虽然 CMake 可以处理极其复杂的问题 项目&#xff…

Rust 语言的 println! 宏的格式占位符

一、占位符 println! 宏的占位符主要基于 Rust 的格式化语法&#xff0c;它支持多种占位符格式来插入和格式化不同的值。除了 {} 和 {:?} 之外&#xff0c;还有其他几种形式&#xff1a; 基本占位符 {}&#xff1a;用于插入任何实现了 Display trait 的类型的值。 调试占位符…

PaddlePaddle框架安装

提示&#xff1a;可在python环境中进行安装&#xff0c;避免环境污染&#xff0c;创建命令conda create -n xxx_name python3.9,激活conda activate xxx_name 第一步&#xff1a;查看计算机平台版本 在窗口输入查看命令&#xff0c;查看CUDA的版本 nvidia-smi 二、根据以下条件…

webpack和vite的区别

webpack和vite都是现代化web构建工具,但他们在构建速度、开发体验、构建结果等方面有所不同 1、构建速度:vite的速度一般快于webpack (1)传统的构建工具例如webpack在开发过程中会对整个应用或者大部分应用进行打包,之后浏览器才能加载处理之后的包(好比webpack打包先从入口文…

C语言---单身狗问题

1.单身狗初阶 这个题目就是数组里面有一串数字&#xff0c;都是成对存在的&#xff0c;只有一个数字只出现了一次&#xff0c;请你找出来 &#xff08;1&#xff09;异或是满足交换律的&#xff0c;两个相同的数字异或之后是0&#xff1b; &#xff08;2&#xff09;让0和每个…

如何利用数据采集工具,解决医疗数据采集痛点?

在当今信息发达的时代&#xff0c;医疗行业也面临着日益增长的数据量和越来越复杂的管理和挑战。医院是医疗服务的核心机构&#xff0c;需要处理大量病人信息、医疗记录、医疗影像等&#xff0c;从而确保病人最佳的治疗。 但传统的医院数据信息往往存在诸多问题&#xff0c;如…

CVPR 2022 Oral | Bailando: 基于编舞记忆和Actor-Critic GPT的3D舞蹈生成

目录 测试结果&#xff1a; 02 提出的方法 测试结果&#xff1a; 预测有3个步骤&#xff0c;速度比较慢 02 提出的方法 1. 针对舞蹈序列的VQ-VAE和编舞记忆 与之前的方法不同&#xff0c;我们不学习从音频特征到 3D 关键点序列的连续域的直接映射。相反&#xff0c;我们先让…

Oracle Linux 8.9 安装 Python 3.11.8 和 Miniconda

Oracle Linux 8.9 安装 Python 3.11.8 和 Miniconda 1. 安装 Python 3.11.82. 安装 Miniconda 1. 安装 Python 3.11.8 Update system, sudo dnf update -yInstall Library, sudo dnf install curl gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make git -yI…

Spring Boot 本地部署 JSP

自己是Spring Boot 的初学者&#xff0c;开始看教程的时候发现基本上都是部署的 JSP&#xff0c;但是按照教程一步步走下来始终无法成功&#xff0c;一直都是 404: 查阅各种资料后&#xff0c;总结出一套 Spring Boot 支持 JSP 的流程&#xff1a; 添加依赖 在pom.xml中添加…

Java算法之动态规划

Java算法之动态规划 前言 ​ 最近这一段时间一直在刷算法题&#xff0c;基本上一有时间就会做一两道&#xff0c;这两天做了几道动态规划的问题&#xff0c;动态规划之前一直是我比较头疼的一个问题&#xff0c;感觉好复杂&#xff0c;一遇到这样的问题就想跳过&#xff0c;昨…

jupyterlab 设置

字体 pip install jupyterlab-fontsFira Code Regular 主题 pip install theme-darcula更改jupyter lab默认启动路径 https://blog.csdn.net/monster_MF/article/details/119248111 &#xff08;1&#xff09;找到jupyter_lab_config所在路径 winR&#xff0c;输入cmd&am…

NIN网络中的网络

是什么 intro LeNet→AlexNet→VGG→NiN→GoogLeNet→ResNetLeNet→AlexNet→VGG 卷积层模块充分抽取空间特征全连接层输出分类结果AlexNet & VGG 改进在于把两个模块加宽 、加深&#xff08;加宽指增加通道数&#xff0c;那加深呢&#xff1f;&#xff08;层数增加叭 Ni…

qemu快速入门

前提&#xff1a; 我们做嵌入式软件的时候&#xff0c;往往可能会缺少嵌入式的硬件&#xff0c;那我们希望提前开始准备代码的话&#xff0c;就需要qemu这个开源软件&#xff0c;它可以模拟各种型号的芯片 。那么我们可以提前在这个模拟器上面去开发代码、验证、调试。 正片开始…