摘要: 一个数字S={a1,a2,...,an}。假设划分两个子数组X, Y 是S 的,并且XUY=S。假设X元素之和为x, y元素之和为y, S元素之和为s。则x+y=s,目标min: y-x(假设y>=x)y-x=s-x-x=s-2*x欲使其min, 只需令2*x最大,即在满足2x<=s,也就是x<=s/2的情况下,求最大的x。这是一个背包问题。struct T{int v;int p;}void func(int a[], int n){s=sumof(a,n);int i,j;T c[n+1][s/2+2];for(i=1;i<=n;i++) for(j=1;2*j&l 阅读全文
posted @ 2013-01-26 19:16 xxx's blog 阅读(230) 评论(0) 推荐(0) 编辑