#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int cmp(const void *a, const void *b);
int dp(int cur);
void output(int i);
int a[35][15];
int d[35];
int count;
int len;
int t;
int main()
{
while(cin >> count >> len)
{
for(int i = 1; i <= count; i++)
{
for(int j = 1; j <= len; j++)
{
cin >> a[i][j];
}
qsort(&a[i][1], len, sizeof(a[0][0]), cmp);
}
memset(d, 0, sizeof(d));
for(int i = 1; i <= count; i++)
{
dp(i);
}
int max;
for(int i = 1; i <= count; i++)
max = d[max] > d[i] ? max : i;
cout << d[max] << endl;
t = 0;
output(max);
cout << endl;
}
}
int cmp(const void *a, const void *b)
{
return (*(int *)a) - (*(int *)b);
}
int dp(int cur)
{
if(d[cur] > 0)
return d[cur];
d[cur] = 1;
for(int i = 1; i <= count; i++)
{
int flag = 1;
for(int k = 1; k <= len; k++)
if(a[cur][k] >= a[i][k])
{
flag = 0;
break;
}
if(flag == 1)
{
d[cur] = d[cur] > (dp(i) + 1) ? d[cur] : (dp(i) + 1);
}
}
return d[cur];
}
void output(int i)
{
if(t == 0)
{
t++;
cout << i;
}
else
cout << " " << i;
for(int j = 1; j <= count; j++)
{
int flag = 1;
for(int k = 1; k <= len; k++)
if(a[i][k] >= a[j][k])
{
flag = 0;
break;
}
if(d[i] == d[j] + 1 && flag == 1)
{
output(j);
break;
}
}
}
UVaOJ_103 - Stacking Boxes
最新推荐文章于 2015-03-31 23:24:27 发布