最优装载—dp

动态规划

一 问题描述

二 问题分析

三 代码实现

package dp_Loading;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException; public class bin
{
public static void main(String[] args) throws IOException
{
int []w={0,20,10,40,30,50,60,70};
int c=180;
dp_Loading myDp_Loading=new dp_Loading(w, c);
}
}
class dp_Loading
{
int w[];
int c;
int cc;
int m[][];
int x[]; //迭代路线记录
public dp_Loading(int w[], int c) throws IOException
{
this.c=c;
this.cc=c;
this.w=w;
this.m=new int [w.length][c+1];
this.x=new int [w.length];
Dp_Loading();
display();
}
public void Dp_Loading()
{
for(int i=0; i<w.length; i++)
{
m[i][0]=0; //船的容量为0
}
for(int j=0; j<=c; j++)
{
m[0][j]=0; //没有集装箱可装
}
for(int i=1; i<w.length; i++)
{
for(int j=1; j<w[i]; j++)
{
m[i][j]=m[i-1][j];
}
for(int j=w[i]; j<=c;j++)
{
m[i][j]=Math.max(m[i-1][j], m[i-1][j-w[i]]+w[i]);
}
}
//恢复迭代路径
for(int i=w.length-1; i>=1; i--)
{
if(m[i][cc]==m[i-1][cc]) //这个集装箱没有装入
{
x[i]=0;
}
else
{
x[i]=1;
cc-=w[i];
}
}
}
public void display() throws IOException
{
BufferedWriter fout=new BufferedWriter(new FileWriter("out.txt"));
fout.write("c="+c);
fout.newLine();
fout.write("optw="+m[w.length-1][c]);
fout.newLine();
fout.write("m[i][j]:");
fout.newLine();
for(int i=0; i<w.length; i++)
{
for(int j=0; j<=c; j++)
{
fout.write("\t"+m[i][j]);
}
fout.newLine();
}
fout.write("x[i]:");
fout.newLine();
for(int i=1; i<w.length; i++)
{
fout.write("\t"+x[i]);
fout.newLine();
}
fout.flush();
}
}

四 运行结果

五 总结收获

  1. dp 关键在于得到递归方程
  2. 由递归方程分析迭代过程,最后给出循环

六不足

  1. dp应当多加练习

最优装载—dp的更多相关文章

  1. 使用STL处理分支限界法处理最优装载问题

    使用STL处理分支限界法处理最优装载问题 #include <iostream>#include <vector>#include <queue>#include ...

  2. 回溯法最优装载问题(java)

    1.问题描述:      有一批共有 n 个集装箱要装上两艘载重量分别为 c1 和 c2 的轮船,其中集装箱 i 的重量为 w[i], 且重量之和小于(c1 + c2).装载问题要求确定是否存在一个合 ...

  3. 矩阵最优路线DP

    母题:矩阵中每个点有权值,每经过一个点就累加权值,求从a点到b点的最优(最大)路线. 题型1: 从左上到右下,只能向下或者向右 for 行 for 列 dp=max dp左,dp上; 扫一遍就行 有时 ...

  4. 动态规划:双重DP

    之前做过的传纸条那道题就是双重动态规划的典型应用,题意就不描述了,直接贴一下以前写过的,经典代码 #include<iostream> using namespace std; ,maxm ...

  5. Dp状态设计与方程总结

    1.不完全状态记录<1>青蛙过河问题<2>利用区间dp 2.背包类问题<1> 0-1背包,经典问题<2>无限背包,经典问题<3>判定性背包问 ...

  6. hdu 3507 斜率dp

    不好理解,先多做几个再看 此题是很基础的斜率DP的入门题. 题意很清楚,就是输出序列a[n],每连续输出的费用是连续输出的数字和的平方加上常数M 让我们求这个费用的最小值. 设dp[i]表示输出前i个 ...

  7. [kuangbin带你飞]专题二十 斜率DP

            ID Origin Title   20 / 60 Problem A HDU 3507 Print Article   13 / 19 Problem B HDU 2829 Lawr ...

  8. [原]POJ1141 Brackets Sequence (dp动态规划,递归)

    本文出自:http://blog.csdn.net/svitter 原题:http://poj.org/problem?id=1141 题意:输出添加括号最少,并且使其匹配的串. 题解: dp [ i ...

  9. [HDOJ2639]Bone Collector II(第k优01背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2639 题意:求01背包的第k优解 dp(i, j)表示容量为j时的i优解 对于第二维的操作和01背包几 ...

随机推荐

  1. postgres 基本操作

    登陆: $ psql -U <user> -d <dbname> 数据库操作: $ \l      //查看库 $  \c <dbname>   //切换库 // ...

  2. CMDB服务器管理系统【s5day90】:获取今日未采集主机列表

    1.目录结构 1.服务器端 2.客户端 2.具体代码如下 1.数据库增加两个字段 class Server(models.Model): """ 服务器信息 " ...

  3. dpkg用管道批量删除deb

    dpkg -l |grep deepin|awk '{print $2}'|xargs sudo dpkg -P

  4. js介绍,js三种引入方式,js选择器,js四种调试方式,js操作页面文档DOM(修改文本,修改css样式,修改属性)

    js介绍 js运行编写在浏览器上的脚本语言(外挂,具有逻辑性) 脚本语言:运行在浏览器上的独立的代码块(具有逻辑性) 操作BOM 浏览器对象盒子 操作DOM 文本对象 js三种引入方式 (1)行间式: ...

  5. JN_0001:在微信朋友圈分享时长大于10s的视频

    1,先在聊天窗口里发送视频. 2,长按视频点击”收藏“. 3,进入微信收藏管理页面,播放视频. 4,点击右上角三点按钮,选择“转存为笔记”. 5,于是在收藏页面中会生成一个新的收藏笔记链接,打开链接再 ...

  6. linux select 与 阻塞( blocking ) 及非阻塞 (non blocking)实现io多路复用的示例【转】

    转自:https://www.cnblogs.com/welhzh/p/4950341.html 除了自己实现之外,还有个c语言写的基于事件的开源网络库:libevent http://www.cnb ...

  7. JdbcTemplate中queryForObject方法返回空结果或不正确结果数量的解决方法

    在使用Spirng提供的JdbcTemplate中名为queryForObject API进行数据库查询时有时会抛出如下异常: org.springframework.dao.EmptyResultD ...

  8. C++设计模式——适配器模式

    生活中的适配器 买笔记本电脑,买手机时,都有一个电源适配器,电源适配器又叫外置电源,是小型便携式电子设备及电子电器的供电电压变换设备,常见于手机,笔记本电脑上.它的作用是将家里的220V高电压转换成这 ...

  9. LabVIEW--好书推荐与分享

    LabVIEW宝典 此书可以作为工具书,配合LabVIEW的范例程序学习可以达到事半功倍的效果. 链接:https://pan.baidu.com/s/17jm6PznLyGW8rVQ_veaGCg ...

  10. 【原创】数据库基础之Mysql(1)常用命令

    1 创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 比如 create user 'test_user'@'%' identi ...