2014年6月30日 星期一

uva 102 Ecological Bin Packing

從反面去想會比較簡單:全部扣掉不用扣的,即為需要移動的步數。

 字典順序:
可以把他想成每次都從最小的開始排起
ex: 1 2 3 4     下一個是 1 2 4 3、1 4 2 3 ....
ex: BCD        下一個是 BDC、CBD

我的寫法並不是很好, 全部一個一個列出來~


#include <stdio.h>
#include <stdlib.h>

int main(void){
    int color[3][3]={0};
    int i,j;
    char buf[4]={0};

    int total,minMove,temp;


    /*BGC*/
    while(scanf("%d %d %d",&color[0][0],&color[0][1],&color[0][2])!=EOF){
        total = color[0][0] + color[0][1] + color[0][2];

        for(i=1;i<3;++i){
            for(j=0;j<3;++j){
                scanf("%d",&color[i][j]);

                total += color[i][j];
            }
        }

        minMove=total;
        /*BCG*/
        temp = total - color[0][0] - color[1][2] - color[2][1];
        if(temp < minMove){
            minMove = temp;
            strcpy(buf,"BCG");
        }

        /*BGC*/
        temp = total - color[0][0] - color[1][1] - color[2][2];
        if(temp < minMove){
            minMove = temp;
            strcpy(buf,"BGC");
        }

        /*CBG*/
        temp = total - color[0][2] - color[1][0] - color[2][1];
        if(temp < minMove){
            minMove = temp;
            strcpy(buf,"CBG");
        }

        /*CGB*/
        temp = total - color[0][2] - color[1][1] - color[2][0];
        if(temp < minMove){
            minMove = temp;
            strcpy(buf,"CGB");
        }

        /*GBC*/
        temp = total - color[0][1] - color[1][0] - color[2][2];
        if(temp < minMove){
            minMove = temp;
            strcpy(buf,"GBC");
        }

        /*GCB*/
        temp = total - color[0][1] - color[1][2] - color[2][0];
        if(temp < minMove){
            minMove = temp;
            strcpy(buf,"GCB");
        }

        printf("%s %d\n",buf,minMove);
    }


    return 0;
}

沒有留言:

張貼留言