hdu1065&&poj1051 Wooden Sticks
来源:互联网 发布:加里波利战役数据 编辑:程序博客网 时间:2024/05/16 09:57
hdu1065&&poj1051 Wooden Sticks 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1051&&http://poj.org/problem?id=1065
题目大意:一堆有长度和重量的Sticks(木棒),要将它们按一定规律加工,求加工时间。
题意理解:每个单位(Sticks)有两个参数,length(长度)和weight(重量),记为l和w。加工一根木棒需一单位时间,再从剩下的木棒中选一根加工,若该木棒的l和w两参数都大于等于前一根,则不用多耗时间,否则再耗1单位时间。
题目归类:贪心水题。
代码如下:
#include<stdio.h>#include<algorithm>using namespace std;struct node //用结构体描述木棒,每根木棒有三个参数:l,w和用作标记的flag{int l,w,flag;}sticks[5050];int cmp(node a,node b){if(a.flag==b.flag)return a.l<b.l?1:0;else return a.flag<b.flag?1:0;}int chuli(int f,int n) //按排好的顺序遍历sticks结构体,由于长度已排,所以只判断重量,符合的标记flag,if(不符)跳过。{if(sticks[0].flag)return f;f++; //f代表走到第几遍(需要多少单位时间)sticks[0].flag=f;int temp=sticks[0].w;for(int i=1;i<n;i++){if(temp<=sticks[i].w)sticks[i].flag=f,temp=sticks[i].w;}sort(sticks,sticks+n,cmp); //标记一遍后,按标记排序return chuli(f,n);}int main(){int t,n;scanf("%d",&t);for(int i=0;i<t;i++){scanf("%d",&n);for(int j=0;j<n;j++) //输入{scanf("%d%d",&sticks[j].l,&sticks[j].w);sticks[j].flag=0;}sort(sticks,sticks+n,cmp); //按木棒length(长度)排序/*for(int i=0;i<n;i++){printf("%d %d %d\n",sticks[i].l,sticks[i].w,sticks[i].flag);}*/printf("%d\n",chuli(0,n));}return 0;}
PS:做完之后又有新思路。这题还能用结构体二重排序。定义结构体时省去flag,将sticks结构体按l和w(l优先)的顺序排序,遍历时遇到w断点时计数,可得最终时间。这个方法似乎能更省一点时间精力。
- hdu1065&&poj1051 Wooden Sticks
- hdu1065 Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- 推荐php开发利器 快速创建web应用
- URL的一些建议
- WebService学习更新中~
- data and bindings
- 关闭本程序多个Activity
- hdu1065&&poj1051 Wooden Sticks
- "我的电脑"出现多个盘符,指向同一块硬盘?(SUBST命令)
- ubuntu中如何自己设置分辨率和主显示器
- JAVA项目开发中常遇到的字符串替换问题
- 将long数据存到字符串中并格式化字符串数组
- 开源软件的编译流程
- hibernate一对一双向主键关联_XML
- 2013年最流行的php框架盘点
- finding memory leaks for Solaris applications