HDU-1051 做个骑士,以梦为马
2016-02-27 12:09
267 查看
#include <iostream> #include <algorithm> #define MAX 5010 using namespace std; /****************************************************************************************************************** 本题是一个比较简答的贪心算法题目,关键在于贪心策略的选择: 1.先按照木条的长度(或者重量)进行升序排序,如果木条的长度(或者质量)时,按照其质量(或者长度)进行升序排序。 2.对所有木条进行排序后,依次进行选择满足题目条件的木条。 由于题目要求当且仅当 l<=l' and w<=w'时,才不会消耗时间,所以可以证明以上贪心策略是正确的。 ******************************************************************************************************************/ struct Node { int l; int w; bool vis; //变量访问记录,防止二次访问 }node[MAX]; bool cmp(Node x,Node y) { if(x.l<y.l) return true; else if(x.l==y.l) return x.w<y.w; return false; } int main() { int T,n; cin>>T; while(T--) { int num=0; cin>>n; for(int i=0;i<n;i++){ cin>>node[i].l>>node[i].w; node[i].vis=false; //初始化 vis 均为未访问变量 } sort(node,node+n,cmp); for(int i=0;i<n;i++){ if(node[i].vis!=true){ //假如未访问,访问过便跳过 num++; //第一次木棍时间为1 minute,并且改变访问标记为已访问 node[i].vis=true; int temp=node[i].w; //若 weight为升序,则更新weight,并将升序排列的 weight更新为已访问 for(int j=i+1;j<n;j++){ if(node[j].w>=temp&&node[j].vis!=true){ node[j].vis=true; temp=node[j].w; } } } } cout<<num<<endl; } return 0; }
相关文章推荐
- 贪心算法的C语言实现与运用详解
- 贪心算法 WOODEN STICKS 实例代码
- 浅析java贪心算法
- c语言来实现贪心算法之装箱问题
- 贪心算法
- 贪心算法——找纸币问题
- ACM常用算法
- 喷水装置
- 过河问题
- HDU 1009
- TOJ 2882
- 【贪心】今年暑假不AC
- 【贪心】FatMouse' Trade
- 背包问题knapsack的三种解法(Python 和 C)
- 背包问题knapsack的三种解法(Python 和 C)
- LeetCode之Jump Game
- 九度OJ 题目1082:代理服务器
- 贪心算法-哈夫曼编码
- usaco 1.3.2 Barn Repair
- POJ 1328.Radar Installation