the output for first test case is wrong it should be
(John)1 4 5 6 2 2 ----- (Mary)2 2 4 5 6 1 1 7 8 ------ (Mary) 8 1 7
minimum cuts made are 2


On Tue, Jan 11, 2011 at 10:04 AM, Jammy <xujiayiy...@gmail.com> wrote:

> (a) it is intuitive to see we need to make a recursive function which
> takes  the following arguments:
>    1) array,
>    2) start index,
>    3) length of the array,
>    4) a sentinel indicating if it is the first half or second half
>    5) a sum if it is the second half
>    6) number of cuts so far
>    7) a global minimal cuts
>
> So my recursive function looks something like this,
> void cutMinHelper(int *arr, int start, int len, bool isFirst, int sum,
> int cut, int &minV, vector<int> &res);
>
> and its wrapper just takes two arguments
> void cutMin(int *arr, int len);
>
> The idea is to differentiate the first half and second half. If it's
> the first half, you need make all possible cuts, and recursive call
> itself to get the second done. If it's the second half, you need
> calculate sums all the way to the end. Break out of the loop if it
> equals to the sum of the first part. And then recursively call itself
> to get the first half done.
>
> I hope my code explains the idea...Please report any bugs you find :)
>
> vector<int> minVector; //storing the cuts
>
> void cutMin(int *arr, int len){
>        int cut=0, minV = INT_MAX;
>        vector<int> res;
>        cutMinHelper(arr, 0, len, true, 0, cut, minV, res);
>        if(minV<INT_MAX){
>                cout<<"minimal cut is"<<minV<<endl;
>        }
>
> }
>
> void cutMinHelper(int *arr, int start, int len, bool isFirst, int sum,
> int cut, int &minV, vector<int> &res){
>        if(isFirst && start<len){
>                if(start==0) cut = 0;
>                int sum = arr[start];
>                cut++;
>                for(int i = start+1; i < len; i++){
>                        vector<int> addOne = res;
>                        addOne.push_back(i-1);
>                        cutMinHelper(arr, i , len, !isFirst, sum, cut, minV,
> addOne);
>                        sum += arr[i];
>                }
>        }
>        if(!isFirst && start<len){
>            int i, sum2 = 0;
>                for(i = start; i < len; i++){
>                        sum2 += arr[i];
>                        if(sum2 == sum){
>                                break;
>                        }
>                }
>                if( i==len-1 && sum2==sum) {
>                        if(cut<minV){
>                                minV = cut;
>                                minVector = res;
>                        }
>                }
>                if(i<len-1){
>                        cut++;
>                        vector<int> addOne = res;
>                        addOne.push_back(i);
>                        cutMinHelper(arr, i+1, len, !isFirst, 0, cut, minV,
> addOne);
>                }
>        }
> }
>
> (b) I didn't write the code, but I think the code would look like the
> first one with few modifications.
>
>
> On Jan 10, 1:08 pm, shady <sinv...@gmail.com> wrote:
> > Given an array of numbers : a1, a2, a3..... an....
> > (a)    divide them in such a way that every alternate segment is given to
> > two persons john and mary, equally,,,, the number of segments made should
> be
> > minimum...
> > eg....
> > for input
> > 1 4 5 6 2 2 2 2 4 5 6 1 1 7 8 8 1 7
> > segments :
> > (John)1 4 5 6 2 2 ----- (Mary)2 2 4 5 6 1 --- (john) 1 7 8 ------ (Mary)
> 8 1
> > 7
> > minimum cuts made are 3
> >
> > (b)    Divide the numbers in such a way that both recieve same sum of
> > numbers.
> > If input
> > 3 4 5 7 2 5 2
> > segments
> > (john) 3 4 5 ----- (mary) 7 2 5 ----- (john) 2
> > minimum cuts are 2
>
> --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to algoge...@googlegroups.com.
> To unsubscribe from this group, send email to
> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>
>


-- 
Arpit Sood
Some day you will see things my way.
http://arpit-sood.blogspot.com

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algoge...@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to