POJ 1065 Wooden Sticks
Posted fudanxi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1065 Wooden Sticks相关的知识,希望对你有一定的参考价值。
思路:
排序后依次进行贪心选择;
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 struct node { 5 int l, w; 6 bool isUsed; 7 }nodes[5000];//木棍数组 8 bool cmp(const node& n1, const node &n2) 9 { 10 if (n1.l < n2.l) 11 return true; 12 else if (n1.l == n2.l&&n1.w < n2.w) 13 return true; 14 else 15 return false;//记得这句 16 } 17 int main() 18 { 19 int t; 20 cin >> t; 21 for (int i = 0; i<t; i++) 22 { 23 int n; 24 cin >> n; 25 for (int j = 0; j<n; j++) 26 { 27 cin >> nodes[j].l >> nodes[j].w; 28 nodes[j].isUsed = false; 29 } 30 31 sort(nodes, nodes + n, cmp); 32 node cur = nodes[0];//木棍0为当前最后用过的木棍 33 nodes[0].isUsed = true; 34 int c = 0;//启动时间 35 while (1) 36 { 37 for (int j = 0; j<n; j++)//在未使用的木棍中,将l,w不小于当前木棍的木棍设为使用 38 { 39 if (nodes[j].isUsed == false) 40 { 41 if (nodes[j].l >= cur.l&&nodes[j].w >= cur.w) 42 { 43 nodes[j].isUsed = true; 44 cur = nodes[j]; 45 } 46 } 47 } 48 c++;//启动时间+1 49 int j; 50 for (j = 0; j<n; j++)//寻找没有用过的木棍,标记为最后使用的,退出 51 { 52 if (nodes[j].isUsed == false) 53 { 54 cur = nodes[j]; 55 nodes[j].isUsed = true; 56 break; 57 } 58 59 } 60 if (j == n)//用完了退出 61 break; 62 } 63 cout << c << endl; 64 } 65 return 0; 66 }
以上是关于POJ 1065 Wooden Sticks的主要内容,如果未能解决你的问题,请参考以下文章