0
题目来源于王道论坛
已知由nn2)个正整数构成的集合A={ak|0kn},将其划分为两个不相交的子集A1A2,元素个数分别是n1n2A1A2中元素之和分别为S1S2。设计一个尽可能高效的划分算法,满足|n1-n2|最小且|S1-S2|最大。要求:

1)给出算法的基本设计思想。

2)根据设计思想,采用CC++语言描述算法,关键之处给出注释。

3)说明你所设计算法的平均时间复杂度和空间复杂度。

回答后才能看到答案和解析
6年前上传
2个回答

6-5 划分整数数组 (20分) 由n个正整数构成的集合A{ak}, 将其划分为两个不相交的子集A1,A2, 元素个数分别是n1,n2, A1和A2中的元素之和分别是S1,S2。 设计一个尽可能高效的划分算法,满足|n1-n2|最小,且|S1-S2|最大,返回|S1-S2|的结果。 注意:函数头已经给出,只需要写出函数体。

4年前回答

include

include

include<stdio.h>

include<malloc.h>

define N 1000

using namespace std;

int Partition(int a[],int low,int high) { int i=low,j=high; int pivot; pivot=a[low]; while(i<j) { while(i<j&&a[j]>=pivot) --j; a[i]=a[j];
while(i<j&&a[i]<=pivot) ++i; a[j]=a[i]; } a[i]=pivot; return i; } int solve(int a[],int n); int main() { int a[N],n; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; cout<<solve(a,n);

2323 1
4年前回答
我的回答