zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    RecyclerView的通用适配器
    Service由浅到深——AIDL的使用方式
    Android热修复——Tinker的集成
    ListView ,GridView 通用适配器
    Android开发者必知的5个开源库
    Android下强制打开键盘
    Android下强制打开软键盘
    怎么监听Android软键盘的打开和关闭
    【转】ListView 3D翻页效果
    Android 手动显示和隐藏软键盘
  • 原文地址:https://www.cnblogs.com/orangeblog/p/2433864.html
Copyright © 2011-2022 走看看