NYOJ236 贪心算法

来源:互联网 发布:什么是遗传算法 编辑:程序博客网 时间:2024/06/05 16:10

题目大意:

传送门

我的理解:

首先进行对木棒数组进行排序,从小到大,长度更小的排在前面,长度相同的质量更小的排在前面。采用贪心算法。

具体在代码注释;

我的代码:

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define MAX_N 5005using 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;}}