一、题目
二、代码
class Solution
{
public int lastStoneWeightII(int[] stones)
{
int i,j;
int length;
int sum =0;
length = stones.length;
for(i=0;i<length;i++)
{
sum = sum+stones[i];
}
int target = sum/2;
int[] dp = new int[target+1];
for(i=0;i<length;i++)
{
for(j=target;j>=stones[i];j--)
{
dp[j] = Math.max(dp[j],dp[j-stones[i]]+stones[i]);
}
}
int return_int = (sum-dp[target])-dp[target];
// System.out.println(" return_int " +return_int);
return return_int;
}
}
三、运行结果
四、附录
二刷
class Solution
{
//分成两堆 看差值 即一堆石头最多可以到一半的什么程度
public int lastStoneWeightII(int[] stones)
{
int i,j;
int length = stones.length;
int sum = 0;
for(i=0;i<length;i++) sum += stones[i];
//System.out.println(" sum "+sum );
int target = sum/2;
//System.out.println(" target "+target );
boolean[] res = new boolean[target+1];
res[0] = true;
for(i=0;i<length;i++)
{
for(j=target;j>=stones[i];j--)
{
res[j] = res[j] ||res[j-stones[i]];
}
}
for(i=target;i>=0;i--)
{
if(res[i] == true)
{
//System.out.println( " i "+i );
return (sum-i)-i;
}
}
return 0;
}
}