代码随想录算法训练营第四十二天

我家娃可太好看了,有点担心月嫂走了没法照顾娃。

明天没有新的题,所以我今天开个头吧。又懒了。

 01背包问题 二维

思路看了一遍,默写一下哈。甚至看了两遍,但是还没开始搞。。。振作起来!!!

目前看就是核心那一行有点问题,具体看备注吧,然后就是把验证代码也放上来了。

#include <iostream>
#include <vector>
using namespace ::std;
int main()
{int n;int bagweight;cin >> n;cin >> bagweight;// cout << "n是  " << n << endl;// cout << "bagweight  " << bagweight << endl;vector<int> weight(n, 0);vector<int> value(n, 0);for (int i = 0; i < n; i++){cin >> weight[i];}for (int i = 0; i < n; i++){cin >> value[i];}// test// for (int i = 0; i < n; i++)// {//     cout << "weight是  " << weight[i] << endl;//     cout << "value是  " << value[i] << endl;// }vector<vector<int>> dp(n, vector<int>(bagweight + 1, 0));for (int j = weight[0]; j <= bagweight; j++){dp[0][j] = value[0];}for (int i = 1; i < n; i++){for (int j = 0; j <= bagweight; j++){if (weight[i] > j){//这行实际上也做了第0列,第i行的赋值。dp[i][j] = dp[i - 1][j];}else{//要考虑 j - weight[i] 是前一个价值可能性dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); }}}// for (int i = 0; i < n; i++)// {//     for (int j = 0; j < bagweight; j++)//     {//         cout << " " << dp[i][j];//     }//     cout << endl;// }cout << dp[n-1][bagweight];return 0;
}

随想录的写法学习一下。


//二维dp数组实现
#include <bits/stdc++.h>
using namespace std;int n, bagweight;// bagweight代表行李箱空间
void solve() {vector<int> weight(n, 0); // 存储每件物品所占空间vector<int> value(n, 0);  // 存储每件物品价值for(int i = 0; i < n; ++i) {cin >> weight[i];}for(int j = 0; j < n; ++j) {cin >> value[j];}// dp数组, dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能达到的最大价值vector<vector<int>> dp(weight.size(), vector<int>(bagweight + 1, 0));// 初始化, 因为需要用到dp[i - 1]的值// j < weight[0]已在上方被初始化为0// j >= weight[0]的值就初始化为value[0]for (int j = weight[0]; j <= bagweight; j++) {dp[0][j] = value[0];}for(int i = 1; i < weight.size(); i++) { // 遍历科研物品for(int j = 0; j <= bagweight; j++) { // 遍历行李箱容量// 如果装不下这个物品,那么就继承dp[i - 1][j]的值if (j < weight[i]) dp[i][j] = dp[i - 1][j];// 如果能装下,就将值更新为 不装这个物品的最大值 和 装这个物品的最大值 中的 最大值// 装这个物品的最大值由容量为j - weight[i]的包任意放入序号为[0, i - 1]的最大值 + 该物品的价值构成else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);}}cout << dp[weight.size() - 1][bagweight] << endl;
}int main() {while(cin >> n >> bagweight) {solve();}return 0;
}

 01背包问题 一维 

一维需要从后往前整,浅试了一下,然后发现背包要从0开始,因为没有初始化i = 0的情况

#include <iostream>
#include <vector>
using namespace ::std;
int main()
{int n;int bagweight;cin >> n;cin >> bagweight;// cout << "n是  " << n << endl;// cout << "bagweight  " << bagweight << endl;vector<int> weight(n, 0);vector<int> value(n, 0);for (int i = 0; i < n; i++){cin >> weight[i];}for (int i = 0; i < n; i++){cin >> value[i];}// test// for (int i = 0; i < n; i++)// {//     cout << "weight是  " << weight[i] << endl;//     cout << "value是  " << value[i] << endl;// }vector<int> dp(bagweight + 1,0);for (int i = 0; i < n; i++){for (int j = bagweight; j >= weight[i]; j--){dp[j] = max(dp[j], dp[j - weight[i]] + value[i]); }}//for (int j = 0; j < bagweight; j++)//{//    cout << " " << dp[i][j];//}//cout << endl;cout << dp[bagweight];return 0;
}

 416. 分割等和子集 

力扣啦,能少整点东西。他的思路是用背包,重量和价值相同。

套路我自己其实还是有点想不到:

  • 背包的体积为sum / 2
  • 背包要放入的商品(集合里的元素)重量为 元素的数值,价值也为元素的数值
  • 背包如果正好装满,说明找到了总和为 sum / 2 的子集。
  • 背包中每一个元素是不可重复放入。
class Solution {
public:bool canPartition(vector<int>& nums) {int sum = 0;for(int i = 0;i < nums.size();i++){sum += nums[i];}if(sum % 2 != 0)return false;vector<int>dp(sum/2 + 1,0);for(int i = 0;i < nums.size();i++){for(int j = sum/2;j >= nums[i];j--){dp[j] = max(dp[j],dp[j - nums[i]] + nums[i]);}}return (dp[sum/2] == sum/2);}
};

随想录和我做的差不多,我就不贴上来了,欠的债还了,还有今天的没做!!加油!!

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

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

相关文章

IOS 开发 - block 使用详解

1.Blobk的定义 block的写法相对难记,不必司机应被,只需要在xcode里打出"inlineBlock"--回车, 系统会自动帮你把基础版写法给你匹配出来 //Block的基础声明//等号""之前是blobk的声明,等号“”后面是block的实现/*returnType:返回类型(void、int、String *…

如何使用 Nginx、MySQL、 PHP 在 Ubuntu 22.04 上安装 WordPress

Apache通常是部署WordPress的首选&#xff0c;因为它被广泛使用&#xff0c;配置简单&#xff0c;并且与WordPress的要求具有强大的兼容性。 然而&#xff0c;Nginx是一个可行的替代方案&#xff0c;并提供了自己的一系列优势。Nginx以其高性能而闻名&#xff0c;特别是在处理…

速盾:高防CDN-完美防御

如今&#xff0c;网络安全已成为企业和个人不可忽视的重要问题之一。随着网络技术的不断发展&#xff0c;网络攻击的手段也越来越复杂和隐蔽。因此&#xff0c;保护网络的安全性变得尤为重要。针对网络攻击的防护手段也在不断升级和完善。其中&#xff0c;高防CDN作为一种完美的…

Java面试题:什么是线程安全,如何使代码线程安全?

线程安全是指在多线程环境中&#xff0c;代码能够正确地工作而不会导致数据不一致或程序崩溃。当多个线程访问共享资源时&#xff0c;如果这些线程的执行顺序是不确定的&#xff0c;可能会导致数据的不一致性。为了确保线程安全&#xff0c;需要采取一定的措施来控制对共享资源…

zabbix监控Tongweb7企业版(by lqw+sy)

此贴参考zabbix通过jmx监控Tongweb7企业版&#xff08;by lqw&#xff09;&#xff0c;是在此帖子的基础和同事整理的文档基础上重新部署验证的优化版&#xff0c;使用的是centos7。 优点&#xff1a; 1.不需要通过jmx配置进行监控。&#xff08;jmx配置需要修改tongweb的配置…

大模型预训练与微调

一、基础知识 机器学习数学原理&#xff1a;梯度下降&#xff08;gradient descent&#xff09;在机器学习中应用十分的广泛&#xff0c;不论是在线性回归还是Logistic回归中&#xff0c;它的主要目的是通过迭代找到目标函数的最小值&#xff0c;或者收敛到最小值。深度学习 …

[leetcode]最多公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl"示例 2&#xff1a; 输…

IO复用技术(1)——select/poll/epoll原理介绍及使用案例

文章目录 1.Select1.1 工作流程1.2 fd_set函数1.3 select函数1.4 例程 2.poll2.1 poll函数2.2 例程 3.epoll3.1 工作流程3.2 相关函数3.3 epoll的两种工作模式3.4 示例代码 4.总结 原理&#xff1a;使用一个线程来检查多个文件描述符&#xff0c;委托内核进行检查&#xff0c;如…

Mac OS系统如何更新

用了好几年的Mac Book安装软件经常提示需要更高的系统版本&#xff0c;因此要升级系统版本&#xff0c;但是开始在系统设置里面找了一下没有找到升级的按钮&#xff0c;找了资料后才知道如何升级。有以下两种入口 一、App Store搜索MacOs&#xff0c;在出现的搜索结果中选择下载…

新的排序算法

我发现了 石油 新的排序算法&#xff01;&#xff01;&#xff01; 算法&#xff1a; 定义布尔数组a[NUM] (我也不知道NUM的值) 输入 n&#xff0c;循环输入n次整数x,每次输入把a[x]的值改为1&#xff0c;输出每个 a[i]1 的 i 是有序序列 算法时间复杂度 O(n) 空间占用(字节…

微服务----nacos配置及简单使用

目录 什么是nacos 项目在nacos上进行注册 注入nacos依赖 配置application.yml文件 nacos写入配置文件 首先&#xff0c;还是需要导入依赖 然后在nacos中编写配置文件 prod是我自定义的一个命名空间&#xff0c;在这里面进行配置文件编写~ 启动类上加上注解 编写Patt…

2013NOIP普及组真题 2. 表达式求值

线上OJ&#xff1a; 一本通&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1962 核心思想&#xff1a;&#xff08;模拟&#xff09; 本题的符号只有 和 ∗ * ∗&#xff0c;没有括号&#xff0c;没有表达式的合法性判断&#xff0c;所以逻辑上不复杂。只需…

SpringBoot+Vue项目企业客户管理系统

一、前言介绍 本文主要论述了如何使用JAVA语言开发一个企业客户管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述企业客户管理系统的当前背景以及系统开…

Qt之信号与槽

槽的本质&#xff1a;对信号响应的函数。 信号函数和槽函数通常位于某个类中&#xff0c;和普通的成员函数相⽐&#xff0c;它们的特别之处在于&#xff1a; 信号函数⽤ signals 关键字修饰&#xff0c;槽函数⽤ public slots、protected slots 或者 private slots 修饰。sign…

数据结构---单链表

题目&#xff1a;构造一个单链表。 使用的软件&#xff1a;VS2022使用的语言&#xff1a;C语言使用的项目&#xff1a;test.c Setlist.h Setlish.c 项目实践&#xff1a; Setlist.h的代码为&#xff1a; #pragma once#include<stdio.h> #include<stdlib.h> #incl…

【算法小白周赛2】A.朋友遍天下(easy)C++代码和题解

题目链接&#xff1a;https://www.starrycoding.com/problem/165 题目描述 本题与hard版本有一定区别&#xff0c;仅“拜访时间安排表”的规则相同&#xff0c;hard版本需要进行一定修改才能通过easy版本。 醋酸锌有许多的好友&#xff0c;为了能好好拜访他的每一个好友&…

Java | Leetcode Java题解之第67题二进制求和

题目&#xff1a; 题解&#xff1a; class Solution {public String addBinary(String a, String b) {StringBuffer ans new StringBuffer();int n Math.max(a.length(), b.length()), carry 0;for (int i 0; i < n; i) {carry i < a.length() ? (a.charAt(a.leng…

.离散化.

离散化就是将原本大而稀疏的区间&#xff0c;映射到紧凑连续的区间内。进而压缩区间长度。 题目&#xff1a; 假定有一个无限长的数轴&#xff0c;数轴上每个坐标上的数都是 00。 现在&#xff0c;我们首先进行 n&#x1d45b; 次操作&#xff0c;每次操作将某一位置 x&#…

单调栈|496.下一个更大元素I

力扣题目链接 class Solution { public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {stack<int> st;vector<int> result(nums1.size(), -1);if (nums1.size() 0) return result;unordered_map<int, …

连接和使用vCenter Server嵌入式vPostgres数据库

vCenter Server 早期支持内嵌(embedded)和外部(external)数据库,内嵌数据库就是vPostgres,基于VMware Postgres数据库(PostgreSQL数据库),外部数据库用的多的是Oracle数据库和SQL Server数据库。因为早期使用内嵌的PostgreSQL数据库只能用于小型环境,比如仅支持几十台…