算法基础---动态规划

一:通过金矿模型介绍动态规划

连接

二:代码部分

Code:

package DynamicProgarmming;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * @author MohnSnow
 * @time 2015年6月15日 上午10:19:55
 * @title 有一个包和n个物品,包的容量为m,每个物品都有各自的体积和价值,
 *        问当从这n个物品中选择多个物品放在包里而物品体积总数不超过包的容量m时,
 *        能够得到的最大价值是多少?[对于每个物品不可以取多次,最多只能取一次,
 *        之所以叫做01背包,0表示不取,1表示取]
 * @INPUT m=10 n=5 [3,6][2,3][6,5][5,4][4,6]
 * 
 * 
 */
public class package0and1 {

	/**
	 * @param argsmengdx
	 *            -fnst
	 */
	/*
	 * public static int volueSum = 10;
	 * public static int[] volue = { 3, 2, 6, 5, 4 }; //volue与value一一对应
	 * public static int[] value = { 6, 3, 5, 4, 6 };
	 */
	public static int	volueSum	= 100;
	public static int[]	volue		= { 77, 22, 29, 50, 99 };	//volue与value一一对应
	public static int[]	value		= { 92, 22, 87, 46, 90 };

	public static int packageQues(int volueSum, int location) {
		if (location < 0) {
			return 0;
		} else if (location == 0) {
			if (volue[0] > volueSum) {
				return 0;
			} else {
				return value[0];
			}
		} else {
			int a, b;
			//包括这个点
			if (volueSum < volue[location]) {
				a = packageQues(volueSum, location - 1);//不得不 不包括
			} else {
				a = value[location] + packageQues(volueSum - volue[location], location - 1);//不得不 包括
			}
			//不包括这个点			
			b = packageQues(volueSum, location - 1);
			System.out.println("0/1背包问题分解a为:" + a + " b:为" + b);
			return Math.max(a, b);
		}
	}

	public static void main(String[] args) {
		int location = volue.length - 1;
		//System.out.println("0/1背包问题:" + packageQues(volueSum, location));
		System.out.println("0/1背包问题:" + packageQues(100, location));
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值