zoukankan      html  css  js  c++  java
  • 贪心优化+poj2376

    http://poj.org/problem?id=2376

    题目:问有N头牛,每头牛的工作时间不同,要工作T小时,最少需要几头牛工作

    思路:一开始以为排序就可以过了,TLE了两次,25000*25000不优化会超啊,

    果断另开一个数组,把排序后最优的数据放进去再选择

    1 4

    1 9

    2 7

    其实优化下就剩下1 9

    View Code
    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;

    struct data
    {
    int ll,rr;
    }s[25009],end[25009];

    int cmp(data a,data b)
    {
    if(a.ll==b.ll)
    return a.rr<b.rr;
    else
    return a.ll<b.ll;
    }

    int main()
    {
    int n,t;
    while(scanf("%d%d",&n,&t)!=EOF)
    {
    int i,j;
    for(i=0;i<n;i++)
    {
    scanf("%d%d",&s[i].ll,&s[i].rr);
    }

    sort(&s[0],&s[n],cmp);

    int ADD=0,tempmax=0;
    for(i=0;i<n;i++)
    {
    if(tempmax>=s[i].rr) continue;

    tempmax=s[i].rr;
    if(s[i].ll!=s[i+1].ll)
    {
    end[ADD].ll=s[i].ll;
    end[ADD].rr=s[i].rr;
    ADD++;
    }
    }

    int ok=1;
    int add=1,ll=end[0].ll,rr=end[0].rr;


    for(i=1;i<ADD;i++)
    {
    add++;
    int rj;
    int temprr=rr;
    for(j=i;j<ADD;j++)
    {
    if(temprr+1<end[j].ll)
    {
    if(j==i)
    ok=0;
    break;
    }
    else
    {
    if(end[j].rr>rr)
    {
    rr=end[j].rr;
    rj=j;
    }
    }
    }
    if(ok!=0)
    {
    rr=end[rj].rr;
    i=rj;
    }

    if(ok==0)break;
    }

    if(ok==0||ll>1||rr<t)
    {
    printf("-1\n");
    }
    else
    printf("%d\n",add);
    }
    }



  • 相关阅读:
    mac iterm2配置
    Test注解的两个属性(转)
    稳定排序和不稳定排序(转)
    [转]异步机制与异步原理
    Flex学习笔记
    [转]有道云笔记markdown
    H5调试
    react生命周期方法
    ESLint 代码检查规范
    REST API
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2279894.html
Copyright © 2011-2022 走看看