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

相关文章

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

Linux find 命令完全指南及核心用法

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧... 目录一、基础搜索模式1. 按文件名搜索(精确/模糊匹配)2. 排除指定目录/文件二、根据文件类型筛选三、时间