Here is my answer, I think it's working well, but could someone tell me what's its complexity ?
Thanks
int ksum( int a[], int n, int b[], int m, int maxk )
{
std::vector<int> results;
int* check = new int[m*n];
memset( check, 0, n*m*sizeof(int) );
int finali, finalj;
int starti = 0, startj = 0;
for( int k=1; k<maxk+1; ++k )
{
int max = 0;
int maxi=n, maxj=m;
for( int i=starti; i<n && i<k; ++i )
{
if( i>maxj )
break;
for( int j=i; j<m && j<k; ++j )
{
if( i>maxi && j>=maxj )
break;
if( check[i*m+j] == 0 )
{
int tmp = a[i]+b[j];
if( tmp>max )
{
max = tmp;
finali = i, finalj = j;
}
maxi = i, maxj = j;
break;
}
}
}
starti = finali;
maxi=n, maxj=m;
for( int j=startj; j<n && j<k; ++j )
{
if( j>maxi )
break;
for( int i=j; i<m && i<k; ++i )
{
if( j>maxj && i>=maxi )
break;
if( check[i*m+j] == 0 )
{
int tmp = a[i]+b[j];
if( tmp>max )
{
max = tmp;
finali = i, finalj = j;
}
maxi = i, maxj = j;
break;
}
}
}
startj = finalj;
if( max > 0 )
{
check[finali*m+finalj] = 1;
results.push_back( max );
}
}
delete[] check;
if( maxk > results.size() )
return 0;
else
return results[maxk-1];
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[] = {10,8,6,4,1};
int b[] = {9,6,3,2,1};
int res = ksum( a, 5, b, 5, 9 );
return 0;
}