实验二 动态规划算法 用动态规划法求解0/1背包问题
2012-04-03 22:22
267 查看
用动态规划法求解0/1背包问题
一、实验要求与目的
1、 掌握动态规划算法求解问题的一般特征和步骤。
2、 使用动态规划法编程,求解0/1背包问题。
二、实验内容
1、 问题描述:给定n种物品和一个背包,物品i的重量是Wi,其价值为Vi,问如何选择装入背包的物品,使得装入背包的物品的总价值最大?
2、 算法描述。
三、源代码
importjava.util.*;
import java.io.*;
public class SF_01Beibao_fenzhifa {
public static void main(String[] args) {
Scanner read=new Scanner(System.in);
System.out.println("请输入背包的容量:");
int c=read.nextInt();
System.out.println("请输入物品的个数:");
int n=read.nextInt();
int w[]=new int
;
int v[]=new int
;
System.out.println("请输入物品的重量:");
for (inti=0;i<n ;i++ )
{
w[i]=read.nextInt();
}
System.out.println("请输入物品的价值:");
for (inti=0;i<n ;i++ )
{
v[i]=read.nextInt();
}
System.out.println("最优值为:"+maximumJoy(w,v,c));
}
public static intmaximumJoy(int[] lostHealth, int[] joy,int c){
returnZeroOneBag(lostHealth,joy,c);
}
public static intZeroOneBag(int[] weight,int[] value,int bag){
int[] dp=new int[bag+1];
for(inti=0;i<weight.length;i++){
int lost=weight[i];
if(lost<bag+1){
for(int j=bag-lost;j>=0;j--){
dp[j+lost]=Math.max(dp[j+lost], dp[j]+value[i]);
}
![](http://img1.51cto.com/attachment/201204/222236591.png)
}
}
returndp[bag];
}
}结果:
本文出自 “梦朝思夕” 博客,请务必保留此出处http://qiangmzsx.blog.51cto.com/2052549/824845
一、实验要求与目的
1、 掌握动态规划算法求解问题的一般特征和步骤。
2、 使用动态规划法编程,求解0/1背包问题。
二、实验内容
1、 问题描述:给定n种物品和一个背包,物品i的重量是Wi,其价值为Vi,问如何选择装入背包的物品,使得装入背包的物品的总价值最大?
2、 算法描述。
三、源代码
importjava.util.*;
import java.io.*;
public class SF_01Beibao_fenzhifa {
public static void main(String[] args) {
Scanner read=new Scanner(System.in);
System.out.println("请输入背包的容量:");
int c=read.nextInt();
System.out.println("请输入物品的个数:");
int n=read.nextInt();
int w[]=new int
;
int v[]=new int
;
System.out.println("请输入物品的重量:");
for (inti=0;i<n ;i++ )
{
w[i]=read.nextInt();
}
System.out.println("请输入物品的价值:");
for (inti=0;i<n ;i++ )
{
v[i]=read.nextInt();
}
System.out.println("最优值为:"+maximumJoy(w,v,c));
}
public static intmaximumJoy(int[] lostHealth, int[] joy,int c){
returnZeroOneBag(lostHealth,joy,c);
}
public static intZeroOneBag(int[] weight,int[] value,int bag){
int[] dp=new int[bag+1];
for(inti=0;i<weight.length;i++){
int lost=weight[i];
if(lost<bag+1){
for(int j=bag-lost;j>=0;j--){
dp[j+lost]=Math.max(dp[j+lost], dp[j]+value[i]);
}
![](http://img1.51cto.com/attachment/201204/222236591.png)
}
}
returndp[bag];
}
}结果:
本文出自 “梦朝思夕” 博客,请务必保留此出处http://qiangmzsx.blog.51cto.com/2052549/824845
相关文章推荐
- 0/1背包问题的动态规划法求解 —— Java 实现
- 0-1背包问题求解归纳(动态规划法,贪心算法,回溯法,分治法和分支界限法)__更新到完整
- 动态规划法——求解0-1背包问题
- 0/1背包问题的动态规划法求解 —— Java 实现
- 动态规划法——求解0-1背包问题
- (算法设计与分析)用动态规划法求解资源分配问题 (验证型实验)
- 动态规划法求解简单的(0/1)背包问题
- 动态规划法——求解0-1背包问题
- 0/1背包问题的动态规划法求解 —— Java 实现
- 0/1背包问题的动态规划法求解 —— Java 实现
- 动态规划算法求解0-1背包问题
- 0/1背包问题的动态规划法求解 —— Java 实现
- 动态规划算法求解0,1背包问题
- 动态规划算法分析及实例——求解完全背包问题(java实现)
- 用动态规划法求解生物信息学中DNA序列比对的问题 (交叉学科应用实验)
- 动态规划法——求解0-1背包问题
- 动态规划算法实现部分——0/1背包问题
- 遗传算法求解0/1背包问题
- 背包问题——“01背包”最优方案总数的求解
- 背包问题动态规划求解