Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
一道贪心题想一想很好做。对数据排序,然后从一段开始找,要能包住所有的点,然后尽量少。 代码如下: #include <stdio.h> #include <stdlib.h> void q_sort(int *a,int s,int t) { int i, j; if(s<t) { i = s+1; j = t; while(1) { while(i<=t && a[i]<=a[s]) i++; while(j>s && a[j]>=a[s]) j--; if(i>=j) break; a[i] ^= a[j]; a[j] ^= a[i]; a[i] ^= a[j]; } if(j!=s) { a[s] ^= a[j]; a[j] ^= a[s]; a[s] ^= a[j]; } q_sort(a, s, j-1); q_sort(a, j+1, t); } } int main() { int r, n, i, a[1000], C, R, mark; scanf("%d%d", &r, &n); while(!(r==-1 && n==-1)) { for(i=0;i<n;i++) { scanf("%d", a+i); } q_sort(a, 0, n-1); //printf("111\n"); mark = 0; i = 0; while(1) { C = a[i] + r; while(i<n && a[i] <= C) i++; mark++; if(i>=n) break; R = a[i-1] + r; while(i<n && a[i]<=R) i++; if(i>=n) break; } printf("%d\n", mark); scanf("%d%d", &r, &n); } return 0; } 《挑战程序设计竞赛》第二版的贪心算法这一章有讲到这个题。这本书不错,如果学竞赛的话,我觉得比《算法导论》更实用一些。可以入手哦。电子版应该也很容易找到。 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator