一 问题分析

二 代码实现

package Dp_0_1_bag;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException; public class bin
{ public static void main(String[] args) throws IOException
{
int c=10;
int []w= {0,2,2,6,5,4};
int []v= {0,6,3,5,4,6};
dp_0_1_Bag myDp_0_1_Bag=new dp_0_1_Bag(w, v, c);
} }
class dp_0_1_Bag
{
int m[][]; //动态规划 最优解值记录
int w[]; //重量
int c; //背包容量
int v[]; //价值
int x[]; //最优解
public dp_0_1_Bag(int w[],int v[],int c) throws IOException
{
this.m=new int [w.length][c+1];
this.x=new int [w.length];
this.v=v;
this.w=w;
this.c=c;
Dp_0_1_Bag();
traceback();
display();
}
public void Dp_0_1_Bag()
{
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]]+v[i]));
}
}
}
public void traceback()
{
for(int i=w.length-1; i>=1; i--)
{
if(m[i][c]==m[i-1][c])
{
x[i]=0;
}
else
{
x[i]=1;
c-=w[i];
}
}
}
public void display() throws IOException
{
BufferedWriter fout=new BufferedWriter(new FileWriter("out.txt"));
fout.write("m[i][j]");
fout.newLine();
for(int i=0; i<w.length; i++)
{
for(int j=0; j<=c; j++)
{
fout.write(""+m[i][j]+"\t");
}
fout.newLine();
}
fout.flush();
fout.write("x[i]");
fout.newLine();
for(int i=1; i<x.length; i++)
{
fout.write(""+x[i]);
fout.newLine();
}
fout.flush();
}
}

三 运行结果

四 收获

  1. 将背包重量离散化

  2. 自我认为dp算法也是一种高明的枚举迭代策略

  3. dp算法的关键在于分析子结构,得出递归方程

  4. 五 不足

    这个算法如果在背包容量很大的情况下,算法复杂度将会倍增

01背包-dp的更多相关文章

  1. noj [1479] How many (01背包||DP||DFS)

    http://ac.nbutoj.com/Problem/view.xhtml?id=1479 [1479] How many 时间限制: 1000 ms 内存限制: 65535 K 问题描述 The ...

  2. PAT L3-001 凑零钱(01背包dp记录路径)

    韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有104枚来自各个星球的硬币,需要请你帮她盘算一下,是 ...

  3. HDU 1203 I NEED A OFFER!(01 背包DP)

    点我看题目 题意 : 中文题不详述. 思路 :类似于01背包的DP,就是放与不放的问题,不过这个要求概率,至少得到一份offer的反面就是一份也得不到,所以先求一份也得不到的概率,用1减掉就可以得到所 ...

  4. (01背包 dp)P1049 装箱问题 洛谷

    题目描述 有一个箱子容量为VV(正整数,0≤V≤20000),同时有nn个物品(0<n≤30,每个物品有一个体积(正整数). 要求nn个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入 ...

  5. 0-1背包dp|波动数列|2014年蓝桥杯A组10-fishers

    标题:波动数列 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a ...

  6. HDU 2602 Bone Collector (01背包DP)

    题意:给定一个体积,和一些物品的价值和体积,问你最大的价值. 析:最基础的01背包,dp[i] 表示体积 i 时最大价值. 代码如下: #pragma comment(linker, "/S ...

  7. hiho #1038 : 01背包 (dp)

    #1038 : 01背包 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 且说上一周的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励 ...

  8. Bookshelf 2(poj3628,01背包,dp递推)

    题目链接:Bookshelf 2(点击进入) 题目解读: 给n头牛,给出每个牛的高度h[i],给出一个书架的高度b(所有牛的高度相加>书架高度b),现在把一些牛叠起来(每头牛只能用一次,但不同的 ...

  9. TZOJ 1545 Hurdles of 110m(01背包dp)

    描述 In the year 2008, the 29th Olympic Games will be held in Beijing. This will signify the prosperit ...

随机推荐

  1. PXE+HTTP+TFTP+Kickstart实现无人值守部署centos6.10

    在联网的状态下安装所需软件: Shell> yum install dhcp httpd tftp-server xinetd syslinux system-config-kickstart ...

  2. javascript 自动填充功能

    javascript 自动填充功能 javascript: (function(){ $("#zipcode").val("zip");$("#pho ...

  3. Python杂写1

    一:编程及编程语言介绍 编程的目的:人把自己的思想流程表达出来,让计算机按照这种思想去做事,把人给解放出来. 编程语言:简单的说就是一种语言,是人和计算机沟通的语言. 编程:例如Python,利用Py ...

  4. ubuntu 下配置munin

    环境: "Ubuntu 13.10" 安装: apt-get install munin munin-nodeapt-get install apache2 配置: 1. vim ...

  5. Ubuntu下安装kate编辑器

    Ubuntu下安装kate编辑器   Ubuntu 下安装kate编辑器 #sudo apt-get install kate 安装kconsole #sudo apt-get install kco ...

  6. 51 NOd 1459 迷宫游戏 (最短路径)

    1459 迷宫游戏  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 你来到一个迷宫前.该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间, ...

  7. IOU和非极大值抑制

    如何判断对象检测算法运作良好呢? 一.交并比(Intersection over union,IoU) 是产生的候选框(candidate bound)与原标记框(ground truth bound ...

  8. Nginx 提示host not found in upstream 错误解决方法

      Nginx DNS resolver配置实例,本文讲解在proxy_pass 和 upstream server 通信的时候需要手动指定 resolver,本文就给出了配置实例. nginx 通过 ...

  9. EF Fluent API

    EntityTypeConfiguration 它可以为一个实体类,配置一个模型. Entity Framework 6 一次加载许多个 Fluent API 映射 如果对于许多实体有大量映射,则 O ...

  10. SRS流媒体服务器搭建+ffmpeg推流VLC取流观看

    一.编译SRS https://github.com/winlinvip/simple-rtmp-server 目前有1.0-release.2.0.3.0等版本 2.0官方文档地址:https:// ...