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

相关文章

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

全网最全Tomcat完全卸载重装教程小结

《全网最全Tomcat完全卸载重装教程小结》windows系统卸载Tomcat重新通过ZIP方式安装Tomcat,优点是灵活可控,适合开发者自定义配置,手动配置环境变量后,可通过命令行快速启动和管理... 目录一、完全卸载Tomcat1. 停止Tomcat服务2. 通过控制面板卸载3. 手动删除残留文件4.

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

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 验证虚