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

相关文章

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

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.