799 - 背包问题VIII - LintCode
描述
给一些不同价值和数量的硬币。找出[1,n]范围内的总值有多少种形成方式?
题目链接:https://www.lintcode.com/problem/799/
方法一:递归
#include "iostream"
#include "vector"
#include "cstring"
using namespace std;
int process(vector<int> &value, vector<int> &amount, int index, int n) {if (index == value.size()) {return n == 0 ? 1 : 0;}int way = 0;for(int i = 0; i <=amount[index]; i++){way = way || (process(value, amount, index + 1, n) || process(value, amount, index + 1, n - i * value[index]));}return way;
}
int main(){vector<int> value;value.push_back(1);value.push_back(2);value.push_back(4);vector<int> amount;amount.push_back(2);amount.push_back(1);amount.push_back(1);int n = 10;int ans = 0;for(int i = 1; i <= n; i++){ans += process(value, amount, 0, i); }cout << ans; return 0;
}
方法二:dp(二维数组)
class Solution {public:/*** @param n: the value from 1 - n* @param value: the value of coins* @param amount: the number of coins* @return: how many different value*/int backPackVIII(int n, vector<int> &value, vector<int> &amount) {// write your code hereint dp[value.size() + 1][n + 1];memset(dp, 0, sizeof(dp));dp[value.size()][0] = 1;for(int i = value.size() - 1; i >= 0; i--){for(int j = 0; j <= n; j++){dp[i][j] = dp[i][j] || dp[i + 1][j];if(dp[i][j] == 1){continue;}for(int k = 0; k <= amount[i] && k * value[i] <= j; k++){dp[i][j] = dp[i][j] || dp[i + 1][j - k * value[i]];if(dp[i][j] == 1){break;}}}}int ans =0;for(int i = 1; i <= n; i++){ans += dp[0][i];}return ans;}
};
方法三:dp(一维数组)
#include "iostream"
#include "vector"
#include "cstring"
using namespace std;
int main(){vector<int> value{1,2,4};vector<int> amount{2,1,1};int n = 10;vector <int> dp(n + 1);dp[0] = 1;int sum = 0;for (int i = 0; i < value.size(); i++) {for (int j = 0; j <= n; j++) {//之前已经组成的,那么本次就可以传递 amount[i] 次。if (dp[j] >= 1) {dp[j] = amount[i] + 1;} else if (j >= value[i] && dp[j - value[i]] >= 2) {//之前标记的 amount[j - value[i]] > 1 说明还没传递完,继续传递dp[j] = dp[j - value[i]] - 1;}}}for (int i = 1; i <= n; i++) {if (dp[i] >= 1) {sum++;}}cout << sum;return 0;
}
799 - 背包问题VIII - LintCode相关推荐
- 798 - 背包问题VII - LintCode
描述 假设你身上有 n 元,超市里有多种大米可以选择,每种大米都是袋装的,必须整袋购买,给出每种大米的重量,价格以及数量,求最多能买多少公斤的大米 题目链接:https://www.lintcode. ...
- 动态规划之背包类问题详细介绍(代码模板)和例题练习
文章目录 0-1 背包问题 问题概述 0-1背包代码模板 0-1背包例题 完全背包问题 问题概述 完全背包代码模板 完全背包例题 多重背包问题 问题概述 多重背包代码模板 多重背包例题 混合背包问题 ...
- LintCode 92.背包问题
描述 在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i] 样例 样例 1:输入: [3,4,8,5], backpack size=10输出: 9样例 2:输 ...
- LintCode 563. 背包问题 V(DP)
1. 题目 给出 n 个物品, 以及一个数组, nums[i] 代表第i个物品的大小, 保证大小均为正数, 正整数 target 表示背包的大小, 找到能填满背包的方案数. 每一个物品只能使用一次 样 ...
- LintCode 125. 背包问题 II(DP)
1. 题目 有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小 数组 V 表示每个物品的价值. 问最多能装入背包的总价值是多大? 样例 1: 输入: m = 10, A = [ ...
- 【LintCode】Backpack 背包问题
在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i]. 样例 如果有4个物品[2, 3, 5, 7] 如果背包的大小为11,可以选择[2, 3, 5]装入背包, ...
- 背包问题概述(Lintcode- 562.Backpack IV问题解决)
2019独角兽企业重金招聘Python工程师标准>>> 什么是背包问题 背包问题(Knapsack problem)是一种组合优化的NP完全问题.问题可以描述为:给定一组物品,每种物 ...
- LintCode解题目录
看见 LintCode 的代码能力测试CAT(Coding Ability Test)挺好,有倒计时,挺有面试紧迫感.做个记录. 另有本人 LeetCode解题目录.<程序员面试金典>解题 ...
- 基因算法解析、设计,以解决背包问题和旅行商问题为例
一.算法说明 基因算法 基因算法有一套公共的完整的框架,伪代码如下. beginset time t = 0 # first generationinitGeneration() # initiali ...
最新文章
- javascript专业八级测试答案整理
- 【三代增强干货一枚】外向交货单Delivery (VL01N)Header屏幕增强
- [云炬创业基础笔记]第二章创业者测试1
- python 立方体切割块数_blender python通过三角函数调整立方体Location排成圆
- Unity - Humanoid设置Bip骨骼导入报错
- linux chmod修改权限失败,【Linux】chmod修改文件权限
- 【转载保存】cookie在登录时的使用
- 正则提取 html 里input 标记的value 值
- linux下Eclipse连接真机调试Android应用程序
- 视频+案例 | 钟南山院士谈5G医疗
- Latex通过bib文件转出bbl文件
- 鸿蒙OS到底是不是Android套皮?(少bb,看源码!)
- 服务器机房消防系统,服务器机房消防系统和维护
- 前端需要的这些你都学会了吗?
- 私网地址与公网地址是如何转换的?
- SAP FICO 成本对象控制解析
- 安装SQL Server 2000时“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机”错误的排除
- 浅谈雷达在气象领域的基本应用
- Oracle like 走索引
- 在x64上构建智能家居(home assistant) (三) 功能介绍 addons,hacs安装
热门文章
- 大神尝试扒迅雷的代码,竟然被扒了个精光!
- 【C语言初阶】——简易版·扫雷(9*9)【运行逻辑思维导图+细节讲解+源码】【初级】
- 王恩东:摩尔定律的终结本质上是没有革命性技术
- 如何设置国际PayPal
- 计算机目录排版的文章,自动生成目录,论文排版看这一篇就够了
- C语言,往排好序的数组中插入元素
- 登录mysql报错Failed to connect to backoff 或 Failed to get D-Bus connection: Operation not permitted解决方法
- jQuery实现可移动(draggable)和可缩放(sizable)网页元素
- rs485接口上下拉_详解RS-485上下拉电阻的选择
- 禁止ios版本上拉回弹效果