Cod sursa(job #1198139)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 14 iunie 2014 18:02:01
Problema Cutii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>

#define Nmax 3505
#define INF 0x3f3f3f3f

using namespace std;

class cutii{
public:
    int x,y,z;
    cutii()
    {
        x = y = z = 0;
    }
};
class cmp{
public:
    bool operator()(const cutii &c1,const cutii &c2)const
    {
        return c1.x < c2.x;
    }
};

cutii make_cutie(int x,int y,int z)
{
        cutii c;
        c.x = x; c.y = y; c.z = z;
        return c;
}

vector<cutii> V;
int DP[Nmax];
int N,T;

void R()
{
    cutii c;
    V.clear();
    memset(DP,0,sizeof(DP));
    int x,y,z;
    for(int i = 1; i <= N; ++i)
    {
        scanf("%d%d%d",&x,&y,&z);
        V.push_back(make_cutie(x,y,z));
    }
    sort(V.begin(),V.end(),cmp());
}

bool cuplez(cutii &c1, cutii &c2)
{
    return (c1.x < c2.x && c1.y < c2.y && c1.z < c2.z);
}

void solve()
{
    int maxi = 1;
    for(int i = 0; i < N; ++i)
    {
        DP[i] = 1;
        for(int j = i - 1; j >= 0; --j)
            if(cuplez(V[j],V[i]) && DP[i] < DP[j] + 1)
            {
                DP[i] = DP[j] + 1;
                maxi = max(maxi,DP[i]);
            }
    }
    printf("%d\n",maxi);
}

void read()
{
    scanf("%d%d",&N,&T);
    for(int i = 1; i <= T; ++i)
    {
        R();
        solve();
    }
}

int main()
{
    freopen("cutii.in","r",stdin);
    freopen("cutii.out","w",stdout);

    read();

    return 0;
}