既然图都给了,只要讨论清楚就可以了
——疯狂压代码
1 #include <bits/stdc++.h> 2 using namespace std; 3 int ans=50000,X,Y;int x[5],y[5],p[5],q[5],a[201];bool b[5]; 4 void check(){if(X*Y<=ans)ans=X*Y,a[min(X,Y)]=max(X,Y);} 5 void get(int k){X=0;Y=0;for(int i=1;i<=k;i++)X+=p[i],Y=max(Y,q[i]);} 6 void dfs(int k){ 7 if(k>4){ 8 get(4);check(); 9 get(3);Y+=q[4];X=max(X,p[4]);check(); 10 get(2);Y=max(Y+q[3],q[4]);X=max(X,p[3])+p[4];check(); 11 get(2);X+=max(p[3],p[4]);Y=max(q[3]+q[4],Y);check(); 12 if(p[1]<=p[2] && ((q[3]>=q[1]+q[2])&&(p[4]<=p[2]+p[3])||(q[3]>=q[2])&&(p[1]+p[4]<=p[2]+p[3]))) 13 X=p[2]+p[3],Y=max(q[1]+q[2],q[3]+q[4]),check(); 14 return; 15 } 16 for(int i=1;i<=4;i++) 17 if(!b[i])p[k]=x[i],q[k]=y[i],b[i]=1,dfs(k+1),swap(p[k],q[k]),dfs(k+1),b[i]=0; 18 } 19 int main() 20 { 21 for(int i=1;i<=4;i++) scanf("%d%d",&x[i],&y[i]); 22 dfs(1);printf("%d ",ans); 23 for(int i=1;i<=200;i++) 24 if(a[i]*i==ans)printf("%d %d ",i,a[i]); 25 return 0; 26 }