很常见的贪心问题,很多书上都有的题目。不做赘述了,题目直接按照长度排序即可,想想为什么吧。排序后按照贪心的思路进行就好。贪心的思路就是,先找到一个未被访问的木棒,然后标记为访问,一次查找不耗时间的的木棒,并且标记为已经访问,知道所有的木棒都被用完了为止。
贴个程序。
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
struct node{
int length;
int weight;
};
int cmp(node a,node b)
{
return a.length<b.length;
}
node stick[5005];
int flag[5005];
int main()
{
int n,num,i,sum,compare,time;
cin>>n;
while(n--)
{
scanf("%d",&num);
for(i=1;i<=num;i++)
{
scanf("%d%d",&stick[i].length,&stick[i].weight);
flag[i]=0;
}
sort(stick+1,stick+1+num,cmp);
sum=0;
time=0;
while(sum!=num)
{
for(compare=1;compare<=num;compare++)
if(flag[compare]==0)
break;
time=time+1;
for(i=compare;i<=num;i++)
if(flag[i]==0&&stick[i].length>=stick[compare].length&&stick[i].weight>=stick[compare].weight)
{
compare=i;
sum=sum+1;
flag[i]=1;
}
}
printf("%d\n",time);
}
return 0;
}