本人电子系,只为一学生。心喜计算机,小编以怡情。
共用6116ms,一度以为超时。
static public int backPack(int m, int[] A) {
// write your code here
int visited[][]=new int[A.length+1][m+1];
for(int i=1;i<visited.length;i++)
for(int j=1;j<visited[0].length;j++)
if(i-1>=0&&j-A[i-1]>=0)
{
visited[i][j]=Math.max(getmax(visited, j,i), getmax(visited, j-A[i-1], i)+A[i-1]);
if (visited[i][j]==m) {//没有这条语句会超时
return m;
}
}
return getmax(visited, visited[0].length-1, visited.length);
}
static int getmax(int visited[][],int j,int hang)
{
int max=0;
for(int i=0;i<hang;i++)
{
max=max>visited[i][j]?max:visited[i][j];
}
return max;
}
本文介绍了一个针对背包问题的求解算法。通过使用二维数组记录已访问的状态,该算法能够在多项式时间内找到最大价值的物品组合。特别地,文章提供了一种优化方案,在达到容量限制时提前返回结果,有效避免了超时问题。
693

被折叠的 条评论
为什么被折叠?



