After ordering, you can solve it like the Longest Increasing Sequence (LIS)
problem, using Dynamic Programming.

2010/5/19 bob198107 <robertosp...@gmail.com>

> Hi.
> First: I'm new in ACM. 2 day took me to find out how to read and write
> data in the tasks. There should be some sample code for beginners for
> this.
> Second: For me it is not clear what should be done, even if I read the
> text of the tasks few times. I wonder if I am so intellectually
> limited or it has to be so, but I don't know how to bite it.
> Third: I sit on problem
> 103 Stacking Boxes. I sorted input rows (each box lengths
> increasingly). Then I thought I have to sort boxes by the capacity or
> something like that. So I sorted boxes by perimeter increasingly. And
> then check if boxes nest to each other starting from the smallest one.
> For sample input data from  uva.onlinejudge.org and www.algorithmist.com
> it works fine. For my data too. But it has to be wrong cause' of
> "Wrong answer" if I submit the code. I would like my algorithm to
> work.
>
> Fourth: Solution from
> http://cmagical.blogspot.com/2010/01/dowloads-1submitted-solutions-to...
> works but I found place which I don't really understand:
>
> #include<stdio.h>
> #include<stdlib.h>
>
> const int MAX = 33;
>
> int boxes[MAX][12];
> int rawIndex[MAX], v[MAX];
> int path[MAX], rawsNumber, dimention;
>
> int compare(const void *a, const  void *s) {
>    return *(int *)a - *(int *)s;
>
> }
>
> int compareRaws(int n, int m){
>    for (int i = 0; i < dimention; i++) {
>        if (boxes[n][i] <= boxes[m][i]) {
>            return 0;
>        }
>    }
>
>    return 1;
>
> }
>
> void sortIndexes() {
>    for (int i = 0; i < rawsNumber - 1; i++) {
>        for (int j = i + 1; j < rawsNumber; j++) {
>            if (compareRaws(rawIndex[i], rawIndex[j])) {
>                rawIndex[i] ^= rawIndex[j] ^= rawIndex[i] ^=
> rawIndex[j];
>            }
>        }
>    }
>
> }
>
> void print(int n){
>    if (path[n] == -1) {
>        printf("%d", rawIndex[n] + 1);
>        return;
>    }
>
>    print(path[n]);
>    printf(" %d", rawIndex[n] + 1);
>
> }
>
> void solveCase() {
>    int max, indexSize = 0, last;
>    int par;
>
>    sortIndexes();
> <------------------------------------------------------ THIS PLACE I
> DON'T UNDERSTAND
>
>    for (int i = 0; i < rawsNumber; i++) {
>        max = 0;
>        par = -1;
>
>        for (int j = i - 1; j >= 0; j--) {
>            if (compareRaws(rawIndex[i], rawIndex[j])) {
>                if (v[j] > max) {
>                    max = v[j];
>                    par = j;
>                }
>            }
>        }
>
>        path[i] = par;
>        v[i] = max + 1;
>
>        if (v[i] > indexSize) {
>            indexSize = v[i];
>            last = i;
>        }
>    }
>
>    printf("%d\n", indexSize);
>    print(last);
>    putchar('\n');
>
> }
>
> void readCase(){
>    for (int i = 0; i < rawsNumber; i++) {
>        rawIndex[i] = i;
>
>        for (int j = 0; j < dimention; j++) {
>            scanf("%d", &boxes[i][j]);
>        }
>
>        qsort(boxes[i], dimention, sizeof(int), compare); // sorting
> every read raw
>    }
>
> }
>
> int main(int argc, char *argv[]) {
>    while (scanf("%d%d", &rawsNumber, &dimention) == 2) {
>        readCase();
>        solveCase();
>    }
>
>    return 0;
>
> }
>
> It's kind of sorting indexes of raws by comparing values of two fields
> i and j for each i and j. Rest of it is the algorithm I can imagine.
>
> So any suggestions or reply to my  rubbishy writing pleased welcome.
>
> --
> You received this message because you are subscribed to the Google
> Groups "acm_solver" group.
> To post to this group, send email to acm_sol...@googlegroups.com.
> To unsubscribe from this group, send email to acm_solver
> +unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/acm_solver?hl=en.
>
> --
> 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.
>
>


-- 
Mario Ynocente Castro
Undergraduate Student of System Engineering
National University of Engineering, Peru

http://sites.google.com/site/ycmario

-- 
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