Day44 动态规划part06 完全背包理论基础 518. 零钱兑换 II 377. 组合总和 Ⅳ

本文主要是介绍Day44 动态规划part06 完全背包理论基础 518. 零钱兑换 II 377. 组合总和 Ⅳ,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

动态规划part06 完全背包理论基础 518. 零钱兑换 II 377. 组合总和 Ⅳ

完全背包理论基础

acm可运行代码(先遍历物品再遍历背包,一维dp)

#include<iostream>
#include<vector>
using namespace std;int Solution(vector<int>& weights,vector<int>& values,int V){vector<int> dp(V+1);for(int i = 0; i<weights.size();i++){for(int j = weights[i]; j<=V;j++){dp[j] = max(dp[j],dp[j-weights[i]]+values[i]);}}return dp[V];
}
int main(){int N,V;cin>>N>>V;vector<int> weights(N);vector<int> values(N);while(N--){int weight, value;cin>>weight>>value;weights.push_back(weight);values.push_back(value);}std::cout << Solution(weights,values,V) << std::endl;return 0;
}

先遍历背包再遍历物品,一维dp

#include<iostream>
#include<vector>
using namespace std;int Solution(vector<int>& weights,vector<int>& values,int V){vector<int> dp(V+1);for(int j = 0; j <=V;j++){for(int i = 0; i<weights.size();i++){if(j>=weights[i])dp[j] = max(dp[j],dp[j-weights[i]]+values[i]);}}return dp[V];
}
int main(){int N,V;cin>>N>>V;vector<int> weights(N);vector<int> values(N);while(N--){int weight, value;cin>>weight>>value;weights.push_back(weight);values.push_back(value);}std::cout << Solution(weights,values,V) << std::endl;return 0;
}

先遍历背包再遍历物品,二维dp

#include<iostream>
#include<vector>
using namespace std;int Solution(vector<int>& weights,vector<int>& values,int V){int kinds = weights.size();vector<vector<int>> dp(kinds,vector<int>(V+1,0));for(int i= weights[0];i<=V;i++){dp[0][i] = dp[0][i-weights[0]]+values[0];}for(int i=1;i<weights.size();i++){for(int j = 0; j<=V;j++){if(j>=weights[i]){dp[i][j] = max(dp[i-1][j],dp[i][j-weights[i]]+values[i]);}else{dp[i][j] = dp[i-1][j];}}}return dp[kinds-1][V];
}
int main(){int N,V;cin>>N>>V;vector<int> weights(N);vector<int> values(N);while(N--){int weight, value;cin>>weight>>value;weights.push_back(weight);values.push_back(value);}std::cout << Solution(weights,values,V) << std::endl;return 0;
}

518. 零钱兑换 II

必须先遍历物品,再遍历背包

class Solution {
public:int change(int amount, vector<int>& coins) {vector<int> dp(amount+1);dp[0] = 1;for(int i = 0; i<coins.size();i++){for(int j = coins[i]; j<=amount;j++){dp[j] += dp[j-coins[i]];}}return dp[amount];}
};

377. 组合总和 Ⅳ

必须先遍历背包,再遍历物品

class Solution {
public:int combinationSum4(vector<int>& nums, int target) {vector<int> dp(target+1);dp[0] =1;for(int j = 0; j <=target;j++){for(int i =0; i<nums.size();i++){if(j>=nums[i] && dp[j] < INT_MAX-dp[j-nums[i]]) dp[j] += dp[j-nums[i]];}}return dp[target];}
};

这篇关于Day44 动态规划part06 完全背包理论基础 518. 零钱兑换 II 377. 组合总和 Ⅳ的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642433

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式