题目大意:
我的理解:
首先进行对木棒数组进行排序,从小到大,长度更小的排在前面,长度相同的质量更小的排在前面。采用贪心算法。
具体在代码注释;
我的代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define MAX_N 5005
using namespace std;
typedef pair<int,int> P;
P wood[MAX_N];
int tag[MAX_N];
bool cmp(P a,P b){
if(a.first<b.first) return 1;
else if(a.first==b.first&&a.second<b.second) return 1;
return 0;
}
int main()
{
freopen("D:/OJ/挑战程序设计竞赛/NYOJ236.txt","r",stdin);
int T;
cin>>T;
int n;
while(T-- != 0){
int result = 0;
memset(tag,0,sizeof(tag));
cin>>n;
for(int i = 0;i<n;i++){
cin>>wood[i].first>>wood[i].second;
}
sort(wood,wood+n,cmp);
for(int i = 0;i<n;i++){
if(tag[i] == 0){
result++; //相当于重启一次机器
int weight = wood[i].second;
for(int j = i+1;j<n;j++){ //重启机器后,遍历以后的数组,找到还未被访问的以及不用重启机器就能投入作业的木棒
if(tag[j] == 0 && wood[j].second>=weight){
tag[j] = 1;
weight = wood[j].second;
}
}
}
}
cout<<result<<endl;
}
}