• poj1065(贪心)


    悲催的贪心,错了一晚上,还是写的不够严谨;贪心并没想象中的那么简单,重点在悟啊,自己的误也忒多了点!

    这题有点像最长上升子序列,当然二者之间有些本质之别,这题是让求最少有几个上升序列,用贪心的时候要注意先进行从大 到小排序,每次判断一个木头,是否可以加入一个前面某一个序列,可以的话标记此为该段的尾位置,把以前的尾位置置零,如果有多个符合条件的序列则选取尾值最大的一个;

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    typedef struct node
    {
    int x;
    int y;
    int flag;
    }Node;
    Node wood[5001];
    int cmp(const void*s,const void*t)
    {
    if((*(Node*)s).x>(*(Node*)t).x)
    return 1;
    else
    if((*(Node*)s).x<(*(Node*)t).x)
    return -1;
    else
    {
    if((*(Node*)s).y>(*(Node*)t).y)
    return 1;
    else
    return -1;
    }
    }
    int main()
    {
    int n;
    int f;
    cin>>n;
    while(n--)
    {
    int m;
    cin>>m;
    int i,j;
    for(i=0;i<m;i++)
    {
    scanf("%d%d",&wood[i].x,&wood[i].y);
    wood[i].flag=0;
    }
    qsort(wood,m,sizeof(wood[0]),cmp);
    //for(i=0;i<m;i++)
    // cout<<wood[i].x<<" "<<wood[i].y<<endl;
    int sum=1;
    wood[0].flag=1;
    for(i=1;i<m;i++)
    { f=-1;
    for(j=0;j<i;j++)
    if(wood[j].y<=wood[i].y&&wood[j].flag==1)
    {
    if(f==-1)
    f=j;
    else
    if(wood[f].y<=wood[j].y)
    f=j;
    }
    if(f!=-1)
    {
    wood[f].flag=0;
    wood[i].flag=1;

    }
    else
    {
    wood[i].flag=1;
    sum++;
    }
    }
    cout<<sum;
    if(n!=0)
    cout<<endl;

    }

    return 0;
    }
  • 相关阅读:
    memcached客户端memadmin安装使用
    git之一: 在windows下安装git和使用总结
    nginx常用命令
    mysql授权 REVOKE 添加用户等
    mysql密码忘记解决
    个人常用alias
    解决zabbix图形界面中文乱码
    JsonPath的使用
    Httpclient 支持https(转)
    字符串拼接‘+’实现
  • 原文地址:https://www.cnblogs.com/orangeblog/p/2433864.html
Copyright © 2020-2023  润新知