nyoj 236 心急的C小加

来源:互联网 发布:中英文版服装软件 编辑:程序博客网 时间:2024/05/16 05:32
心急的C小加
时间限制:1000 ms  |  内存限制:65535 KB
难度:4
描述
C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否则需要消耗一个单位的时间。因为急着去约会,C小加想在最短的时间内把木棒处理完,你能告诉他应该怎样做吗?


输入
第一行是一个整数T(1<T<1500),表示输入数据一共有T组。
每组测试数据的第一行是一个整数N(1<=N<=5000),表示有N个木棒。接下来的一行分别输入N个木棒的L,W(0 < L ,W <= 10000),用一个空格隔开,分别表示木棒的长度和质量。
输出
处理这些木棒的最短时间。
样例输入


4 9 5 2 2 1 3 5 1 4 

2 2 1 1 2 2 

1 3 2 2 3 1 
样例输出
2
1
3






#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct nood{
int weith,lengh;
}wu[5200];
bool cmp(nood xx,nood yy){
if (xx.lengh==yy.lengh)
return xx.weith<yy.weith;
return xx.lengh<yy.lengh;
}
bool tu[5200];
int main()
{
int t;scanf("%d",&t);
while (t--)
{
bool flag; 
int n;scanf("%d",&n);
memset(tu,false,sizeof(tu));
for (int i=0;i<n;i++)
scanf("%d%d",&wu[i].lengh,&wu[i].weith);
sort(wu,wu+n,cmp);
int ii,jj,pp=0,shu=0;
while (pp<n)
{
shu++;
jj=pp;flag=true;
tu[jj]=true;
for (ii=pp+1;ii<n;ii++)
{
if (tu[ii]) continue;
if (wu[ii].weith>=wu[jj].weith)
{
tu[ii]=true;
jj=ii;
}
else
{
if (flag)
{
pp=ii;
flag=false;
}
}
}
if (flag)
break;
}
printf("%d\n",shu);
}
return 0;

}


贪心思想

0 0
原创粉丝点击