您的位置:首页 > 编程语言 > Java开发

Java解决算法-背包问题

2010-11-28 11:55 253 查看
/**
* title_背包问题 made by 任辉 2010-10-22
*背包问题要求在有限空间内放入总价值最大的物品,并且兼顾物品的体积
*/
public class Task7_22 {
private int []s = {0,3,5,7,8,9};//物品体积数组
private int []v = {0,4,6,7,9,10};//对应物品价值
private int C = 22;//总的价值最大容量
private int V[][] = new int [C+1][C+1];//二维表

public Task7_22(){
System.out.println("最大总价值为:"+KNAPSACK());
printV();
}
/** 算法KNAPSACK */
public int KNAPSACK(){
for(int i=0;i<s.length;i++)
V[i][0] = 0;
for(int j=0;j<=C;j++)
V[0][j] = 0;
for(int i=1;i<s.length;i++)
for(int j=1;j<=C;j++){
V[i][j] = V[i-1][j];
if(s[i]<=j)
V[i][j] = max(V[i][j],V[i-1][j-s[i]]+v[i]);
}
return V[s.length-1][C];
}
/** 两者求最大 */
public int max(int a, int b) {
if (a >= b)
return a;
else
return b;
}
/** 打印二维表 */
public void printV(){
System.out.println("V:");
for(int i=0;i<C+1;i++){
for(int j=0;j<C+1;j++)
System.out.printf("%3d",V[i][j]);
System.out.println("");
}
}
/** mainBase */
public static void main(String[] args) {
new Task7_22();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: