這題要注意題意
當兩個邊重疊時也不能算喔
筆者就卡這個卡了一小時多...
#include<iostream>
#include<stdio.h>
#include<algorithm>
int box[31][10],temp[10];
int b,d;
int ans,ansb[31][31],order[31]={0};
int tempb[31],rm;
bool st(int a,int w){
for(int q=0;q<d;q++)
if(box[a][q]!=box[w][q])
return box[a][q]<box[w][q];
return true;
}
bool check(int i,int j){
bool FT=true;
for(int k=0;k<d;k++)
if(box[i][k]>=box[j][k]){
FT=false;
break;
}
return FT;
}
using namespace std;
int main(){
while(scanf("%d%d",&b,&d)!=EOF){
for(int i=1;i<=b;i++){
order[i]=i;
for(int j=0;j<d;j++)
cin>>temp[j];
sort(temp,temp+d);
for(int j=0;j<d;j++)
box[i][j]=temp[j];
}
sort(order+1,order+1+b,st);
ansb[order[1]][0]=order[1];tempb[order[1]]=1;
for(int i=2;i<=b;i++){
ansb[order[i]][0]=order[i];tempb[order[i]]=i;
int max=0;
for(int j=i-1;j>0;j--)
if(check(order[j],order[i]))
if(tempb[order[j]]>max){
rm=j;
max=tempb[order[j]];
}
tempb[order[i]]=max+1;
for(int j=0;j<max;j++)
ansb[order[i]][j]=ansb[order[rm]][j];
ansb[order[i]][max]=order[i];
}
int mem=1;
for(int i=2;i<=b;i++)
mem=(tempb[order[mem]]>tempb[order[i]])?(mem):(i);
cout<<tempb[order[mem]]<<'\n';
for(int i=0;i<tempb[order[mem]];i++)
printf("%d ",ansb[order[mem]][i]);
cout<<endl;
}
return 0;
}
進來的好辛苦XD
回覆刪除+1....
回覆刪除