//hdu 1051 Wooden Sticks(贪心策略)
/*
题意:有一堆n木棍。
每根的长度和重量都提前知道。
棒是由木工机床在一个接一个的方式处理。
它需要一些时间,启动时间,呼吁机器准备处理。
设置时间与清洁有关操作和改变机器的工具和形状。
给出了木工机床的安装时间如下:
(a)第一根木棍设置时间是1分钟。
(b)后加工一根长度和重量w,机器将不需要设置时间一根长度l和重量w如果l < = l”和w < = w”。
否则,它将需要1分钟的设置。
解题:经分析可采用贪心策略。
先对木棍长度从小到大排,如果长度相等按重量从小到大排。
然后进行贪心策略。具体看代码。
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=5500;
struct node
{
int len,w;
}a[N];
int n;
int vis[N];
int nk;
bool cmp(node a1,node b)
{
if(a1.len<=b.len) return true;
if(a1.w<=b.w&&a1.len==b.len) return true;
return false;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&a[i].len,&a[i].w);
}
sort(a,a+n,cmp);
/*for(int i=0;i<n;i++)
{
cout<<a[i].len<<" "<<a[i].w<<endl;
}*/
memset(vis,0,sizeof(vis));
int ansmiu=1;
vis[nk]=a[0].w;
nk=1;
bool flag;
for(int i=1;i<n;i++)
{
flag=false;
for(int j=0;j<nk;j++)
{
if(a[i].w>=vis[j])
{
flag=true;
vis[j]=a[i].w;
break;
}
}
if(flag==false)
{
vis[nk++]=a[i].w;
ansmiu++;
}
}
printf("%d\n",ansmiu);
}
return 0;
}
hdu 1051 Wooden Sticks(贪心策略)
最新推荐文章于 2020-02-24 00:48:15 发布