动态规划算法题求解

题目:

篮球(5V5)比赛中,每个球员拥有一个战斗力,每个队伍的所有球员战斗力之和为该队伍的总体战斗力。现有10个球员准备分为两队进行训练赛,教练希望2个队伍的战斗力差值能够尽可能的小,以达到最佳训练效果。给出10个球员的战斗力,如果你是教练,你该如何分队,才能达到最佳训练效果?请输出该分队方案下的最小战斗力差值。
输入描述:
10个篮球队员的战斗力(整数,范围[1,10000]),战斗力之间用空格分隔,如:10 9 8 7 6 5 4 3 2 1
不需要考虑异常输入的场景。
输出描述:
最小的战斗力差值,如:1
示例1
输入
10 9 8 7 6 5 4 3 2 1
输出
1
说明
1 2 5 9 10分为一队,3 4 6 7 8分为一队,两队战斗力之差最小,输出差值1。备注:球员分队方案不唯一,但最小战斗力差值固定是1

使用动态规划解题,代码如下

public static int[][]  dps(int[] w, int[] v, int capacity)
	{
		//int[][] dp = new int[w.length][capacity];
		
		int[][] maxdp = new int[w.length][];
		
				
		//dp[w.length][capacity]= {{ 0 }};

		for(int i=1;i<=w.length; i++)
		{
			//****这里容量的变化是前一个物品的体积,不是简单的+1
			for(int j=0; j<=capacity; j=j++)
			{
				maxdp[0][capacity-1] = 0; //动态的第二维, 早初始化边界条件
				maxdp[w.length-1][0] = 0; 
				maxdp[1][1] = v[1]; //先把第一个物品装入背包,之后的物品在这个基础上
				
				if(j<w[i])
				{
					maxdp[i][j]= maxdp[i-1][j];
				}
				else {
					maxdp[i][j]=Math.max(maxdp[i-1][j], maxdp[i-1][j-w[i]]+v[i]);
					System.out.println(maxdp[i][j]);
			    }
			System.out.println(maxdp[i][j]);
		}
		
	}
		return maxdp;
  }

运行时,                    maxdp[i][j]=Math.max(maxdp[i-1][j], maxdp[i-1][j-w[i]]+v[i]);
报ArrayIndexOfBoundsException

请懂的童鞋指导指导。谢谢~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值