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

原创 2015年07月07日 15:19:47

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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ 1065 && HDU 1051 Wooden Sticks 贪心

http://blog.csdn.net/v5zsq/article/details/46790025 Description  有一些木材和一台机器。机器每次加工一根木材需要的时间是1,但是...

ZOJ1025 POJ1065 HDU1051 Wooden Sticks,贪心算法版

这题我用的是贪心算法,对len排序后在weight中找总共有多少个没有公共交点的上升子序列。总的时间复杂度为O(N^2)。 /********************************...
  • neofung
  • neofung
  • 2011年09月09日 18:32
  • 1183

ZOJ-1025(POJ-1065、HDU-1051) Wooden Sticks

Wooden Sticks Time Limit: 2 Seconds      Memory Limit: 65536 KB There is a pile of n wooden st...

HDU——1051&&POJ——1065 Wooden Sticks

Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

zoj 1025 || poj 1065 || hdoj1051 Wooden Sticks

Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

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

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

POJ1065——Wooden Sticks(贪心)

题目链接        题目大意很好懂,给一连串数对,只要后一个数对的两个值比前一个数对两个值都大,那么该数对不消耗时间,否则消耗1单位时间。求如何安排数对顺序使得耗时最少。这题是贪心,先按L从...

POJ1065 Wooden Sticks ACM解题报告(暴力贪心)

这题就是那个3636的兄弟啊,这题数据量还小,暴力直接16MS,不需要二分了(ps.每次我二分都要思考半天) 这题贪心的方法与3636不同,是两个量都升序。因为这题只要大于等于当前的即可不+1; ...

POJ 1065-Wooden Sticks(贪心+暴力)

Wooden Sticks Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18219   ...

POJ 1065 Wooden Sticks (贪心)

题意:给定n只木棍进行加工,如果下次加工的木棍长度和重量都不小于这次的话不需要机器重启,否则机器重启需要一分钟,问加工完需要的最少时间。 按照长度和重量从小到大排序,然后用素数筛选的思路先筛选出来以...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 1065 && HDU 1051 Wooden Sticks(贪心)
举报原因:
原因补充:

(最多只允许输入30个字)