103 - Stacking Boxes
描述:像刘汝佳书上一样需要转化成有向图,然后再统计路最长的就可以了 #include <cstdio> #include <cstring> #include <cstdlib> #define N 32 int n,m,sum; int num[N][12],s[N],pos[N]; bool next[N][N]; int cmp(const void *p1,const void *p2) { return *(int *)p1 - *(int *)p2; } void dfs(int cur,int count) { int c=0; for(int i=1; i<=n; i++) if(next[cur][i]) { s[count]=i; c=1; dfs(i,count+1); } if(!c&&count>sum) { sum=count; for(int i=0; i<count; i++) pos[i]=s[i]; } } int main() { // freopen("a.txt","r",stdin); while(scanf("%d %d",&n,&m)!=EOF) { memset(next,false,sizeof(next)); for(int i=1; i<=n; i++) { for(int j=0; j<m; j++) scanf("%d",&num[i][j]); qsort(num[i],m,sizeof(int),cmp); for(int j=1; j<i; j++) { int flag=0; for(int k=0; k<m; k++) if(num[i][k]>num[j][k]) continue; else flag=1; if(!flag) next[j][i]=true; else { flag=0; for(int k=0; k<m; k++) if(num[j][k]>num[i][k]) continue; else flag=1; if(!flag) next[i][j]=true; } } } sum=0; for(int i=1; i<=n; i++) { s[0]=i; dfs(i,1); } printf("%d\n%d",sum,pos[0]); for(int i=1; i<sum; i++) printf(" %d",pos[i]); puts(""); } return 0; }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步