思路:很容易知道如果選取的某個子陣列的和currentsum=sum/2,則這兩個子陣列的和的差值最小,即從陣列中選取某些數字使得其和接近整個陣列的1/2.,所以該命題本質上是乙個01揹包命題,原命題等價於從n各物品中選取若干個,其重量不超過sum/2,且重量達到最大
基於上述思路**如下:
#include using namespace std;
const int m = 100;
int w[m];
int currentsum[m*m];
bool state[m][m];
int main()
memset(currentsum, 0, sizeof(currentsum));
memset(state, 0, sizeof(state));
for (int i = 0; i < n; ++i)
for (int j = sum/2; j >= w[i]; --j)
}printf("%d\n", sum - currentsum[sum/2]*2);
int i = n, j = sum/2;
while (i--)
}printf("\n");
} return 0;
}
程式執行結果如下:
將乙個整數劃分為多個正整數之和
整數劃分問題是將乙個正整數n拆分成一組數連加並等於n的形式,顯然這組數中最大加數不大於n。令n為需要劃分的整數,m為劃分後的最大整數。例如將6劃分為最大加數為6的劃分形式如下 5 1 4 2,4 1 1 3 3,3 2 1,3 1 1 1 2 2 2,2 2 1 1,2 1 1 1 1 1 1 1 ...
通過shell將乙個檔案劃分為多個檔案
原始檔名為test.xt,檔案內容如下 sort a 3 4 sort a 2 5 sort b 1 2 sort b 2 5 分割後的檔案 file1 sort a 3 4 sort a 2 5 file2 sort b 1 2 sort b 2 5 這個其實很簡單,就是遍歷每一行的時候,在把該行...
將乙個整數劃分為多個正整數之和
整數劃分問題是將乙個正整數n拆分成一組數連加並等於n的形式,顯然這組數中最大加數不大於n。令n為需要劃分的整數,m為劃分後的最大整數。例如將6劃分為最大加數為6的劃分形式如下 65 1 4 2,4 1 1 3 3,3 2 1,3 1 1 1 2 2 2,2 2 1 1,2 1 1 1 1 1 1 1...