POJ 1065 Wooden Sticks

来源:互联网 发布:小区网络监控方案 编辑:程序博客网 时间:2024/06/16 19:56

题目链接

题意:给定一些木棒,已知长度和质量,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否则需要消耗一个单位的时间。

分析:贪心,求非减子序列的数量。。。先按长度递增排序,如果长度一致就按重量递增排序。按顺序扫一遍,从没标记的开始扫,将扫过的木棒标记,扫完所有木棒。

#include<cstdio>#include<algorithm>#include<cstring>#define MAX_N 5005using namespace std;struct node{    int l,w;    bool used;}s[MAX_N];bool comp(const node a,const node b){    if(a.l==b.l)    return a.w<b.w;    else    return a.l<b.l;}int main(void){    int n;    int t;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        for(int i=0;i<n;i++)        {            scanf("%d%d",&s[i].l,&s[i].w);            s[i].used=false;        }        sort(s,s+n,comp);        int sum=0;        for(int i=0;i<n;i++)        {            if(!s[i].used)            {                sum++;                s[i].used=true;                int t=s[i].w;                for(int j=i+1;j<n;j++)                {                    if(!s[j].used&&s[j].w>=t)                    {                        s[j].used=true;                        t=s[j].w;                    }                }            }        }        printf("%d\n",sum);    }    return 0;}
0 0
原创粉丝点击