关闭

POJ 1065 && HDU 1051 Wooden Sticks(贪心)

334人阅读 评论(0) 收藏 举报
分类:

Description
有一些木材和一台机器。机器每次加工一根木材需要的时间是1,但是当加工木材的长度和宽度都小于等于前一根木材的时候,不需要时间。求最少需要多少时间加工完所有的木材
Input
第一行为数据组数t,每组用例第一行为木材数量n,然后是每根木材的长度和宽度
Output
对于每组用例,输出最短加工时间
Sample Input
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
Sample Output
2
1
3
Solution
由于切一根最长最宽的就可以不切比它短和窄的,反过来就是切一根最短最细的就不用切比它长和宽的,所以将木材升序排之后,从最短的开始切,用标记数组表示是否切此根木材,每切一根就把比它长和宽的标记,最后记录没被标记的木材即为需要切的木材数量
Code

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 5050
struct node
{
    int len,wid;
}wood[maxn];
int cmp(node a,node b)
{
    if(a.len==b.len)
        return a.wid<b.wid;
    return a.len<b.len;
}
int main()
{
    int t,n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++)
            scanf("%d%d",&wood[i].len,&wood[i].wid);
        sort(wood,wood+n,cmp);//对木材排序 
        bool flag[maxn];//标记数组,0为切,1为不切 
        memset(flag,false,sizeof(flag));//初始化所有木材都切 
        for(int i=0;i<n;i++)
        {
            if(flag[i])//已经不用切了 
                continue;
            int temp=i;//切这个木材 
            for(int j=i+1;j<n;j++)//比被切的长和宽就不切了 
                if(!flag[j]&&wood[j].len>=wood[temp].len&&wood[j].wid>=wood[temp].wid)
                {
                    flag[j]=1;
                    temp=j;
                }
        }
        int ans=0;
        for(int i=0;i<n;i++)
            if(!flag[i])
                ans++;
        printf("%d\n",ans);
    }
    return 0;
}
0
0
查看评论

POJ1065 Wooden Sticks(贪心+动态规划——单调递增子序列)

POJ1065 Wooden Sticks(贪心+动态规划——单调递增子序列)
  • niushuai666
  • niushuai666
  • 2011-05-14 16:27
  • 5134

HDU-1051-Wooden Sticks(C++ && 不水的贪心!)

Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14161...
  • qq_16542775
  • qq_16542775
  • 2015-06-20 11:38
  • 1223

POJ 1065-Wooden Sticks 贪心问题

<br />题目来源: http://acm.pku.edu.cn/JudgeOnline/problem?id=1065<br /> <br /> <br />解题报告: <br /> <br />...
  • kindlucy
  • kindlucy
  • 2010-08-15 12:45
  • 1940

POJ1065Wooden Sticks(最小上升序列)

Description There is a pile of n wooden sticks. The length and weight of each stick are known in advance. The sticks are to be processed by a woodw...
  • z1192277815
  • z1192277815
  • 2016-08-12 18:26
  • 99

POJ 1065 && HDU 1051 Wooden Sticks 贪心

http://blog.csdn.net/v5zsq/article/details/46790025 Description  有一些木材和一台机器。机器每次加工一根木材需要的时间是1,但是当加工木材的长度和宽度都小于等于前一根木材的时候,不需要时间。求最少需要多少时间加工完所有...
  • qq_36312912
  • qq_36312912
  • 2017-08-05 09:41
  • 79

杭电OJ——1051 Wooden Sticks

Wooden Sticks Problem Description There is a pile of n wooden sticks. The length and weight of each stick are known in advance. The sticks are to...
  • lishuhuakai
  • lishuhuakai
  • 2012-10-26 22:52
  • 5962

hdoj 1051 poj 1065 Wooden Sticks 【贪心】

Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15103 ...
  • nailnehc
  • nailnehc
  • 2015-08-25 21:38
  • 456

POJ 1065 Wooden Sticks 【贪心】

题目链接题意给n个整数对,定义数对间的大于关系是(w1,l1)≤(w2,l2)↔w1≤w2andl1≤l2(w1,l1) \leq (w2,l2) \leftrightarrow w1\leq w2 \,and\, l1\leq l2,求用这些数对最少能组成几组非递减序列分析LIS的变形,但考虑到原...
  • DrCarl
  • DrCarl
  • 2016-08-09 14:41
  • 141

hdu 1051 && poj 1065 Wooden Sticks(贪心+动态规划——单调递增子序列)

题目链接如下: 点击打开链接                Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)  ...
  • qq_31736627
  • qq_31736627
  • 2016-11-19 09:56
  • 148

POJ 1065 Wooden Sticks (贪心)

题意:给定n只木棍进行加工,如果下次加工的木棍长度和重量都不小于这次的话不需要机器重启,否则机器重启需要一分钟,问加工完需要的最少时间。 按照长度和重量从小到大排序,然后用素数筛选的思路先筛选出来以第i根木棍为起始的时候能不重启机器加工出来的所有木棍,然后再往后寻找没有加工过的。结果就是类似于统计...
  • azx736420641
  • azx736420641
  • 2014-12-01 17:07
  • 320
    个人资料
    • 访问:554598次
    • 积分:24555
    • 等级:
    • 排名:第315名
    • 原创:1943篇
    • 转载:0篇
    • 译文:0篇
    • 评论:68条
    最新评论