/* LANG: C++ TASK: packrec */ #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define N 25 #define M 8005 int pl[50][5],num,rec[5][3],Min,Count; struct rect1 { int p,q; }ans[M]; void init() { num=0; for (int i=1;i<=4;i++) for (int j=1;j<=4;j++) if (i!=j) for (int k=1;k<=4;k++) if (k!=i && k!=j) { int t=10-i-j-k; num++; pl[num][1]=i; pl[num][2]=j; pl[num][3]=k; pl[num][4]=t; } for (int i=1;i<=4;i++) scanf("%d%d",&rec[i][1],&rec[i][2]); } int Max(int a,int b,int c,int d) { int ans=a; if (b>ans) ans=b; if (c>ans) ans=c; if (d>ans) ans=d; return ans; } void check(int a,int b) { if (a>b) { int c=a; a=b; b=c; } if (a*b=c1)) leng-=min(leng-a1-b1,leng-c1-d1); check(wide,leng); // wide=max(a2,b2)+max(c2,d2); // leng=max(a1+b1,c1+d1); // check(wide,leng); } } sort(ans+1,ans+Count+1,cmp); ans[0].p=-2; printf("%d\n",Min); for (int i=1;i<=Count;i++) if (ans[i].p!=ans[i-1].p) printf("%d %d\n",ans[i].p,ans[i].q); return 0; }
最后一种情况不太好写,我是把上面两个先并一起,下面两个再并一起,然后看看这两个大的之间能不能压缩。