这道题同样也是贪心
要使木板总长度最少,就要使未盖木板的长度最大。
我们先用一块木板盖住牛棚,然后,每次从盖住的范围内选一个最大的空隙,以空隙为界将木板分成两块,重复直到分成m块或没有空隙。
/* ID:twd30651 PROG:barn1 LANG:C++ */ #include#include #include //#define DEBUG using namespace std; int M; int S; int C; int origin_data[300]; int process_data[300]; int comp(const void*a,const void*b) { return*(int*)a-*(int*)b; } int comp2(const void*a,const void*b) { return*(int*)b-*(int*)a; } int main(int argc,char *argv[]) { freopen("barn1.in","r",stdin); freopen("barn1.out","w",stdout); scanf("%d %d %d",&M,&S,&C); int i=0; int min=300; int max=0; while(scanf("%d",&origin_data[i])==1) { if(origin_data[i]>max)max=origin_data[i]; if(origin_data[i] 网上有说可以用dp,后面学习下