题目:http://hustoj.sinaapp.com/problem.php?id=1826
用个数固定总长最小的几块木板 覆盖不连续的区间 求木板总长
思路:快排 贪心法
#include <stdio.h> #include <stdlib.h> int arr[210]; int gap[210]; int cmp(const void *a,const void *b) { return *(int*)a-*(int *)b; } int main() { int ans=0; int m,s,c; scanf("%d%d%d",&m,&s,&c); for(int i=0;i<c;i++) { scanf("%d",&arr[i]); } ans=c; qsort(arr,c,sizeof(int),cmp); int index=0; for(int i=0;i<c-1;i++) { int interval=arr[i+1]-arr[i]; if(interval!=1) gap[index++]=interval-1; } qsort(gap,index,sizeof(int),cmp); int woodnum=index+1; for(int i=0;woodnum>m&&i<c;i++) { ans+=gap[i]; woodnum--; } if (m>c) printf("%d",c); else printf("%d\n",ans); }
转载于:https://www.cnblogs.com/danielqiu/archive/2012/12/25/2831719.html