UVaOJ_103 - Stacking Boxes

来源:互联网 发布:淘宝的冬天雪地棉 编辑:程序博客网 时间:2024/05/21 21:48
#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;}elsecout << " " << 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;}}}

0 0
原创粉丝点击