Wooden Sticks(Greedy Algorithm)
来源:互联网 发布:北京淘宝代运营 编辑:程序博客网 时间:2024/06/15 09:10
Link:http://acm.hdu.edu.cn/showproblem.php?pid=1051
Wooden Sticks
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12003 Accepted Submission(s): 4980
(a) The setup time for the first wooden stick is 1 minute.
(b) Right after processing a stick of length l and weight w , the machine will need no setup time for a stick of length l' and weight w' if l<=l' and w<=w'. Otherwise, it will need 1 minute for setup.
You are to find the minimum setup time to process a given pile of n wooden sticks. For example, if you have five sticks whose pairs of length and weight are (4,9), (5,2), (2,1), (3,5), and (1,4), then the minimum setup time should be 2 minutes since there is a sequence of pairs (1,4), (3,5), (4,9), (2,1), (5,2).
3 5 4 9 5 2 2 1 3 5 1 4 3 2 2 1 1 2 2 3 1 3 2 2 3 1
213
分析(转自:http://blog.sina.com.cn/s/blog_6827ac4a0100ok61.html):
贪心算法 HDU1051 Wooden Sticks
题目大意:
给n根木棍的长度和重量。根据要求求出制作木棍的最短时间。建立第一个木棍需要1分钟,若是接着要制作的木棍重量和长度都比此木棍长就不需要建立的时间,若是没有,则再需要建立时间。求时间最小为多少。
解题思路:
对木棍的长度和重量进行排序,以长度为首要考虑。排序完后的不一定都是下一根木棍重量和长度都大于前一根的。于是,我们对排序后的数组进行多次扫描,将可以在一次建立时间内完成的进行标记,直到木棍全部标记(设置一个外部变量来计数已扫描的元素的数量)。
例子:
5
4 9
排序完后:
1 4
然后进行第一次扫描:使用mark[]数组进行标记,mark[]初始化为0,红色为第一次描过的。
Stiks: (1 4)
Mark:
这是的setuptime为建立第一根木棍所要的时间,即1,此时扫描计数为3
接着进行第二次扫描,蓝色为第二次扫描过的结果。
Stiks: (1 4)
Mark:
这是的setuptime为1,此时扫描计数为5
my code:
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int l;
int w;
int fg;
}st[5001];
bool cmp(node a,node b)
{
if(a.l!=b.l)
return a.l<b.l;
else
return a.w<b.w;
}
int main()
{
int cas,i,j,n,cnt,ww;
while(scanf("%d",&cas)!=EOF)
{
while(cas--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&st[i].l,&st[i].w);
st[i].fg=0;
}
sort(st,st+n,cmp);
cnt=0;
for(i=0;i<n;i++)
{
if(!st[i].fg)
{
cnt++;
st[i].fg=1;
ww=st[i].w;
for(j=i+1;j<n;j++)
{
if(!st[j].fg&&st[j].w>=ww)
{
st[j].fg=1;
ww=st[j].w;
}
}
}
}
printf("%d\n",cnt);
}
}
return 0;
}
总结:贪心策略很重要!!!
- Wooden Sticks(Greedy Algorithm)
- POJ1065 Wooden Sticks(Greedy)
- HDU1051(Wooden Sticks)
- Wooden Sticks(贪心)
- Wooden Sticks(贪心)
- poj 1065 Wooden Sticks (greedy solved) 求最少启动时间。
- Wooden Sticks(hdu1051,LIS)
- Wooden Sticks(区间覆盖)
- HDU1051 Wooden Sticks(贪心)
- 【HPUoj】Wooden Sticks(贪心)
- hdu1051 Wooden sticks (贪心)
- HDU1051 Wooden Sticks(贪心)
- ZOJ1025-Wooden Sticks(dp)
- HDOJ1051 Wooden Sticks(贪心)
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- protobuf
- 超级厉害伟大的奶爸来啦1999118945498
- nyoj111分数加减法
- 软件设计
- 在VirtualBox下安装win7实现aero效果的图文教程
- Wooden Sticks(Greedy Algorithm)
- Cocos2dEditor-java模拟物理世界的相关知识
- arguments详解
- 【java笔记】单例设计模式
- 腾讯走上王者之位,你以为靠的只是抄袭?
- POJ-1004 Financial Management
- 京东方校园招聘页面重构
- MySql基础-自定义函数(user-defined function,UDF)
- 为什么WiFi自动信道选到的信道多数在1/6/11