サブ配列の和の差の最小値
1353 ワード
この問題は汎微面経の評論の中で一人の兄が出会ったので、私のようなアルゴリズムのカラーペンにとってやはり書いたほうがいいです.
配列の数は2つのグループに分けられ,2つのグループの和の差の絶対値が最小になるアルゴリズムを与えた.配列中の数の取値範囲は0、例えばa[]={2,4,5,6,7}であり、得られた2組の数{2,4,,6}と{5,7},abs(sum(a 1)−sum(a 2))=0である.例えば{2,5,6,10},abs(sum(2,10)−sum(5,6))=1であるため,得られた2組の数はそれぞれ{2,10}と{5,6}である.
タイトル
配列の数は2つのグループに分けられ,2つのグループの和の差の絶対値が最小になるアルゴリズムを与えた.配列中の数の取値範囲は0、例えばa[]={2,4,5,6,7}であり、得られた2組の数{2,4,,6}と{5,7},abs(sum(a 1)−sum(a 2))=0である.例えば{2,5,6,10},abs(sum(2,10)−sum(5,6))=1であるため,得られた2組の数はそれぞれ{2,10}と{5,6}である.
:https://www.nowcoder.com/questionTerminal/1fb223d0e46e481baec6897f5955c45a
:
public static int KnapSack(int num, int weight[], int value[], int x[], int C){
int V[][] = new int[C+1][C+1];
for(int i = 0 ; i <= num ; i++ ){
V[i][0] = 0; // 0;
}
for(int j = 0 ; j <=C ; j++){
V[0][j]=0; // 0
}
for(int i = 1 ; i <= num-1 ; i++){
for(int j = 1 ; j <=C ; j++){
// i , ,
if(j0; i--){
if(V[i][j]>V[i-1][j]){
x[i]=1;
j=j-weight[i];
}
else
x[i]=0;
}
System.out.println(" :");
for(int i = 1 ; i < num ; i++){
System.out.print(x[i]+" ");
}
return V[num-1][C];
}