Cod sursa(job #1409479)

Utilizator mihail.jianuJianu Mihail mihail.jianu Data 30 martie 2015 15:48:53
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<cstdio>
#include<vector>
#include<cstring>
int max2(int a,int b){
    if(a>b)
        return a;
    return b;
}
using namespace std;
const int N=3500;
class Cutie{
    public:
        int x1,x2,x3;
        bool operator>(const Cutie&c)const{
            return x1>c.x1&&x2>c.x2&&x3>c.x3;
        }
};
Cutie v[N+1];
vector<int>g[N+1];
int d[N+1];
int n,t;
int dp(int dad){
    if(d[dad])
        return d[dad];
    for(unsigned int i=0;i<g[dad].size();i++){
        int son=g[dad][i];
        d[dad]=max2(d[dad],d[son]);
    }
    d[dad]++;
    return d[dad];
}
int main(){
    freopen("cutii.in","r",stdin);
    freopen("cutii.out","w",stdout);
    scanf("%d%d",&n,&t);
    while(t--){
        for(int i=1;i<=n;i++)
            scanf("%d %d %d",&v[i].x1,&v[i].x2,&v[i].x3);
        for(int i=1;i<=n;i++)
            g[i].clear();
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(v[i]>v[j])
                    g[i].push_back(j);
        memset(d,0,sizeof(d));
        int res=0;
        for(int i=1;i<=n;i++)
            res=max2(res,dp(i));
        printf("%d\n",res);
    }
    return 0;
}