题意:有一块草坪,长为l,宽为w,再起中心线的不同位置处装有n个点状的喷水装置。每个喷水装置i可以将以它为中心,半径为ri的圆形区域润湿,请选择尽量少的喷水装置,把整个草坪全部润湿。
分析:对于直径小于宽度的喷水装置其实可以忽略,剩下的问题转换成了最小区间覆盖问题,即:用最少数量的区间去覆盖给定的区间
1 #include2 #include 3 #include 4 #include 5 #define zz 6 using namespace std; 7 const int MAXN = 11111; 8 pair a[MAXN]; 9 int main(){10 #ifndef zz11 freopen("in.txt", "r", stdin);12 #endif13 int n;14 double l, w;15 while(scanf("%d%lf%lf", &n, &l, &w)!=EOF){16 int i, j, m = 0;17 for(i=0; i up) break;30 if(a[i].second>up){31 for(j=i; j <=low; j++)32 if(up =l) {flag = true; break;}35 low = up;36 }37 }38 if(flag) printf("%d\n", cnt);39 else puts("-1");40 }41 }