POJ1065 1548

1065问题:

  现有n个点(x1, y1), (x2, y2), (x3, y3)... (xn,yn)。生成m个序列,每个序列x,y均以增序排列。m的最小值为多少。

解法:

  贪心算法:1.将所有点按x排序,x相同的,按y排序。 2.贪心组序列。

 

1546问题:

  有25 * 25的矩阵,其中分布着点,问串连几遍能历遍所有点,串连方向只能往右或下。

 实质:

  已排序的1065。

代码:

  

#include<iostream>
using namespace std;

int map[25][25];

int main(){
    int x, y;
    while(cin >> x >> y){
        int garbage = 1;
        if(x == -1 && y == -1)
            break;
        for(int i = 1; i < 25; i++)
            for(int j = 1; j < 25; j++)
                map[i][j] = 0;
        map[x][y] = 1;
        while(cin >> x >> y){
            if(x == 0 && y == 0)
                break;
            map[x][y] = 1;
            garbage++;
        }
        int cnt = 0;
        while(garbage != 0){
            int dsx = 1;
            for(int i = 1; i < 25; i++)
                for(int j = dsx; j < 25; j++)
                    if(map[i][j] == 1){
                        map[i][j] = 0;
                        garbage--;
                        dsx = j;
                    }
            cnt++;
        }
        cout << cnt << endl;
    }
    return 0;
}

posted on 2012-06-21 22:52  bobchou  阅读(110)  评论(0编辑  收藏  举报

导航