问题描述:
有许多木桩需要处理,每个木桩有长度 li 和重量 wi 这两个属性。处理第一个木桩需要1分钟,之后每次处理木桩,若满足 li+1<=li且 wi+1<=wi ,则不消耗时间。否则,每次处理木桩耗时1分钟。
假设每组有n个木桩,分别给出长度和重量。求最小的总安装时间。
思路:按长度对木桩进行排序,然后用贪心的思想分组,每一组内的木桩都满足条件即可。
输入输出实例:
输入:
1
5
4 9 5 2 2 1 3 5 1 4
输出:
2
说明:输入中第一行代表测试数据数目,第二行为这一组测试数据的木桩数目,第三行为木桩的长度和重量(长 重 长 重......)
#include"stdio.h"
#include"malloc.h"
void sort(int *m,int *follow,int start,int end){ //快速排序
if(start>end) return;
int i=start;
int j=end;
int t=m[start];
int f=follow[start];
while(i<j){
while(m[j]<=t&&i<j)
j--;
m[i]=m[j];
follow[i]=follow[j];
while(m[i]>=t&&i<j)
i++;
m[j]=m[i];
follow[j]=follow[i];
}
m[i]=t;
follow[i]