<分区>
我遇到了一个有趣的算法,但我很难用 C 语言实现它。
我确实在 C++ 中找到了它的代码,但我尝试将 C++ 代码转换为 C,但程序崩溃了。
C++代码如下:
int BalancedPartition ( int a[] , int n ){
int sum = 0;
for( int i = 0 ; i < n ; i++)
sum += a[i];
int *s = new int[sum+1];
s[0] = 1;
for(int i = 1 ; i < sum+1 ; i++) s[i] = 0;
int diff = INT_MAX , ans;
for(int i = 0 ; i < n ; i++)
{
for(int j = sum ; j >= a[i] ; j--)
{
s[j] = s[j] | s[j-a[i]];
if( s[j] == 1 )
{
if( diff > abs( sum/2 - j) )
{
diff = abs( sum/2 - j );
ans = j;
}
}
}
}
cout<< ans << " " << sum-ans<< endl; //two balanced partitions
return min( ans , sum-ans );
}
我的(部分)C 代码如下:
double WeightDifference(int *a, int n)
{
int sum = 0;
for (int i = 0; i < n; i++){
sum += *a[i];
}
const sizeOfS = sum + 1;
int *s[32467];
我们将不胜感激。