装箱问题 动态规划 java_[动态规划]装箱问题
装箱问题(pack.cpp)
【问题描述】有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
【输入样例】
24
6
8
3
12
7
9
7
【输出样例】
0
样例说明:
24——表示箱子容量
6——表示n个物品
8——n行,分别表示n个物品的体积
312
7
9
7
方法一、使用二维数组f[i][j],表示前i个物品装入容量为j的箱子能获得的最大体积,
动态转移方程: f[i][j]=max(f[i-1][j],f[i-1][j-a[i]]+a[i]);
#include
using namespace std;
int f[31][20001];
int main()
{
freopen("pack.in","r",stdin);
freopen("pack.out","w",stdout);
int V,n,i,j;
cin>>V>>n;
int a[n+1];
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
for(j=1;j<=V;j++)
{
if(j
f[i][j]=f[i-1][j];
else
f[i][j]=max(f[i-1][j],f[i-1][j-a[i]]+a[i]);
}
cout<
while(1);
return 0;
}
方法二、方法一虽好,但占用内存空间较大,改用一维数组f[j]:
仍表示前i个物品装箱能获得的最大体积。
#include
using namespace std;
int f[20001];//f[j]表示前i个物品装入获得的最大体积
int main()
{
freopen("pack.in","r",stdin);
freopen("pack.out","w",stdout);
int V,n,i,j;
cin>>V>>n;
int a[n+1];
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
{
for(j=V;j>=1;j--)
{
if(j
装箱问题 动态规划 java_[动态规划]装箱问题相关推荐
- 凑零钱动态规划java_动态规划巧解凑零钱问题 | 创作者训练营
动态规划是运筹学中求最优解的常用手段,解决此类问题的难点在于准确归纳出状态转移方程 状态转移方程,最重要的是先找到状态,然后将「大问题」转换成「小问题」,将「全局问题」转换成「局部问题」.转换的过程用 ...
- 凑零钱动态规划java_凑零钱问题-动态规划回溯贪心
编码乱码问题解释,解决Tomcat乱码的最快速有效办法.[希望能够 编码乱码问题解释,解决Tomcat乱码的最快速有效办法.[希望能够指正] 文章目录 编码乱码问题的自我理解 我们来了解下,程序的执行 ...
- 石子合并问题java_动态规划求石子合并问题
1.问题描述 在一个圆形操场的四周摆放着n 堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.试设计一个算法,计算出将n堆石子合 ...
- 矩阵连乘 动态规划_Java动态规划
1. 介绍 动态规划典型的被用于优化递归算法,因为它们倾向于以指数的方式进行扩展.动态规划主要思想是将复杂问题(带有许多递归调用)分解为更小的子问题,然后将它们保存到内存中,这样我们就不必在每次使用它 ...
- java动态规划装箱问题,最少数量货物装箱问题
题目描述: 最少数量货物装箱问题_牛客网 有重量分别为3,5,7公斤的三种货物,和一个载重量为X公斤的箱子(不考虑体积等其它因素,只计算重量) 需要向箱子内装满X公斤的货物,要求使用的货物个数尽可能少 ...
- 动态规划备忘录方法Java_动态规划和备忘录法的区别
动态规划算法的基本要素:1最优子结构性质当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质.2重叠子问题性质动态规划算法对每个问题只解一次,将其解保存在一个表格中,当再次需要解此问题时 ...
- 钢条分割 动态规划java_【动态规划】初识,钢条切割问题
正文之前其实动态规划老早之前就看过, 但是可惜的是印象不深,到今天彻底忘得差不多了,这两天看<算法导论>终于让我啃下了二叉搜索树和红黑树两个家伙,虽然还未曾熟练于胸,但是基本能用了...现 ...
- 买书动态规划java_《编程之美》买书问题——动态规划
问题描述: 在节假日的时候,书店一般都会做促销活动.由于<哈利波特>系列相当畅销,店长决定通过促销活动来回馈读者.上柜的<哈利波特>平装本系列中,一共有五卷.假设每一卷单独销售 ...
- 动态规划石子排序java_动态规划之石子归并
题目:有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量 和w[i]+w[i+1].问安排怎样的合并顺序,能够使得总合并代价达到最小. 输 ...
最新文章
- Spring Boot 关于 @EnableConfigurationProperties 注解 —— 使用 @ConfigurationProperties 注解的类生效。
- 两步设置:visual studio code(vscode)如何设置文本自动换行
- The Human Touch 将人工智能和机器人用于病人工作的实际和伦理意义
- python基于百度接口的语音识别_Python基于百度接口的语音识别
- ckeditor_4.5.10_full,ckfinder_aspnet_2.6.2,插件使用
- mysql groupby 日期_sql 语言 groupBy 分组统计时间段解决方案
- VS2010安装异常中断后无法安装的解决方法(安装时发生严重错误)
- (三)SpringBoot之配置文件详解:Properties和YAML
- Python一键生成国庆出行攻略,助你出门远游嗨不停!
- NYOJ最长公共子序列(dp)
- redis key操作大全
- docker安装nessus方法
- 无法连接GitHub完整解决方案
- 真机测试无法验证应用
- C#getPixel和内存法读取灰度图信息
- crypto-music is frequency(INS‘hAck CTF 2018)
- 容联云聚客SCRM如何破SCRM保险应用困局
- 通过‘PyQt6‘中的QWidget类创建一个含有按钮的窗口 1
- 甲骨文欲购市值775亿美元的埃森哲 已聘专家评估
- iPhone开发秘笈pdf