POJ 1065 贪心
2017-03-22 00:00
211 查看
解题步骤
采用贪心的思想,在剩余木棍当中选择长度最短重量最小的木棍作为该批次的起始,然后将剩余木棍中所有满足条件(l <= l’ and w <= w’)的木棍加入该批次,然后重新选择木棍开始新的批次。用结构体来存储木棍的长度和重量,用链表来存储N个木棍
对链表进行升序排序,长度作为第一关键字,重量作为第二关键字,即长度递增,若长度相等,则重量递增。
对排序后的链表处理,遍历链表的所有节点(木棍)。对于当前节点,找到所有满足条件的节点( l <= l’ and w <= w’)并删除之,直至到达链表末尾,启动时间加一。
代码
#include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct Sticks) struct Sticks{ int len; int wei; struct Sticks *next; }; void StructSort(struct Sticks *head); int main() { int t,n; struct Sticks *head,*ptr,*tmp; int i,l,w,nl,nw,num; scanf("%d",&t); while(t--){ scanf("%d",&n); head = (struct Sticks*)malloc(LEN); ptr = (struct Sticks*)malloc(LEN); scanf("%d%d",&ptr->len,&ptr->wei); ptr->next = NULL; head->next = ptr; for(i=1;i<n;i++){ tmp = (struct Sticks*)malloc(LEN); scanf("%d%d",&tmp->len,&tmp->wei); tmp->next = NULL; ptr->next = tmp; ptr = ptr->next; } StructSort(head); tmp = head->next; num = 0; while(tmp!=NULL){ l = tmp->len; w = tmp->wei; for(ptr=tmp;ptr!=NULL;){ //满足条件,删除该节点(木棍) if(ptr->next!=NULL&&ptr->next->len>=l&&ptr->next->wei>=w){ l = ptr->next->len; w = ptr->next->wei; ptr->next = ptr->next->next; }else if(ptr!=NULL){ //继续寻找满足条件的节点(木棍) ptr = ptr->next; } if(ptr==NULL) break; } num++; tmp = tmp->next; } printf("%d\n",num); } return 0; } //选择 升序 void StructSort(struct Sticks *head){ struct Sticks *p,*sm,*q; int l,w; for(p = head->next;p!=NULL;p = p->next){ sm = p; l = p->len; w = p->wei; for(q = p->next;q!=NULL;q = q->next){ if(q->len<sm->len) sm = q; else if(q->len==sm->len&&q->wei<sm->wei) sm = q; } if(sm!=p){ p->len = sm->len; p->wei = sm->wei; sm->len = l; sm->wei = w; } } }
相关文章推荐
- POJ1065——Wooden Sticks(贪心)
- POJ 1065 Wooden Sticks 贪心
- POJ 1065 Wooden Sticks【贪心】
- poj 1065_贪心
- POJ 1065 Wooden Sticks (贪心)
- POJ 1065-Wooden Sticks 贪心问题
- Poj 1065 Wooden Sticks【贪心+LIS?】
- poj 1065简单的贪心
- POJ 1065 贪心 最少的上升子序列个数
- POJ 1065(贪心)
- poj 1065 贪心 或 dp
- POJ 1065 Wooden Sticks 贪心
- POJ 1065 贪心
- POJ 1065 Wooden Sticks / hdu 1257 最少拦截系统 DP 贪心
- poj 1065 Wooden Sticks 【贪心 新思维】
- 【贪心】POJ 1065
- poj 1065 Wooden Sticks (贪心)
- poj 1065 Wooden Sticks【贪心】
- (贪心5.2.3)POJ 1065 Wooden Sticks(利用数据有序化来进行贪心选择)
- poj 1065 Wooden Sticks_贪心