动态规划-完全背包(含全部代码)
时间:2019-01-11
本文章向大家介绍动态规划-完全背包(含全部代码),主要包括动态规划-完全背包(含全部代码)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目:假设你是一个小偷,有一个可放总重量为m(m<1000)的背包。现有n(n<32)件物品。
总量分别为W1,W2,...,Wn。并且,物品具有价值,分别为V1,V2,...,Vn。m、n、Wi(1=<i<=n)均为正整数,
并且,每种物品的数量不限,也就是说你可以重复拿一种物品。求能装入的最大总价值。
输入格式:
第一行为两个正整数m和n
接下来n行分别为n对整数,分别表示该物品的重量和价值。
Example:
Input:
4 3
1 1500
3 2000
4 3000
Output:
3500
【分析】 假设物品1为吉他(G表示)、物品2为音响(S表示)、物品3为笔记本电脑(C表示)
状态转移方程:
dp[i]=max(dp[i],dp[i-W[j]]+V[j]),i>=W[j](能装下)
/*
Project: dp_fullback
Date: 2019/01/11
Author: Frank Yu
题目:假设你是一个小偷,有一个可放总重量为m(m<1000)的背包。现有n(n<32)件物品。
总量分别为W1,W2,...,Wn。并且,物品具有价值,分别为V1,V2,...,Vn。m、n、Wi(1=<i<=n)均为正整数,
并且,每种物品的数量不限,也就是说你可以重复拿一种物品。求能装入的最大总价值。
输入格式:
第一行为两个正整数m和n
接下来n行分别为n对整数,分别表示该物品的重量和价值。
Example:
Input:
4 3
1 1500
3 2000
4 3000
Output:
3500
【分析】 假设物品1为吉他(G表示)、物品2为音响(S表示)、物品3为笔记本电脑(C表示)
状态转移方程:
dp[i]=max(dp[i],dp[i-W[j]]+V[j]),i>=W[j]能装下
*/
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<string>
#include<set>
#include<list>
#include<vector>
#include<map>
#include<iterator>
#include<algorithm>
#include<iostream>
#define maxm 1000
#define maxn 32
using namespace std;
int W[maxn],V[maxn];
//打印表
void display(int dp[maxn],int m)
{
for(int i=0;i<=m;i++)
{
cout<<dp[i]<<" ";
}
cout<<endl;
}
//主函数
int main()
{
int m, n;
int dp[maxn];
dp[0]=0;
scanf("%d", &m);//背包重量
scanf("%d", &n);//物品种类
for (int i = 1;i <= n;i++)//下标即第几件物品,W[0]一直为0
{
scanf("%d", &W[i]);
scanf("%d",&V[i]);
}
//填表
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
if(i>=W[j])
{
int choose = dp[i-W[j]]+V[j];//选了,价值增加
if(choose>dp[i])dp[i]=choose;
}
display(dp,m);
cout<<dp[m];
return 0;
}
结果截图:
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 不落地反弹meterpreter | Linux后门系列
- rsyslog的安装、使用、详解
- Nmap NSE 库分析 >>> stdnse
- 安装系统小记
- Nmap NSE 库分析 >>> nmap
- 深入讲解Logback
- python pty & magic | 加固shell
- 通达OA伪造SESSION | Nmap脚本
- Postman使用完全指南
- meterpreter shell | 加固shell
- R语言绘图:复杂散点图绘制
- windows下部署sentinel模式的Redis主从集群
- tmux | 加固shell
- Windows下离线部署Redis主从集群
- SSH 后门 | Nmap 脚本