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