把情况考虑清楚,分类讨论不太复杂
第一种情况:1+1+1形式
第二种情况:1+2形式
然后枚举每个矩形边长a作为底还是边长b作为底就行
#include<bits/stdc++.h> using namespace std; #define ll long long ll p[4][2]; int main(){ int t;cin>>t; while(t--){ for(int i=1;i<=3;i++){ cin>>p[i][0]>>p[i][1]; if(p[i][0]>p[i][1]) swap(p[i][0],p[i][1]); } ll w,h,ans=0x3f3f3f3f3f3f3f3f; for(int i=0;i<2;i++) for(int j=0;j<2;j++) for(int k=0;k<2;k++){ w=p[1][i]+p[2][j]+p[3][k]; h=max(p[1][i^1],max(p[2][j^1],p[3][k^1])); ans=min(ans,h*w); } for(int i=0;i<2;i++){ for(int j=0;j<2;j++) for(int k=0;k<2;k++){ //p[1]在最左边 w=p[1][i]+max(p[2][j],p[3][k]); h=max(p[1][i^1],p[2][j^1]+p[3][k^1]); ans=min(ans,w*h); //p[2]在最左边 w=p[2][i]+max(p[1][j],p[3][k]); h=max(p[2][i^1],p[1][j^1]+p[3][k^1]); ans=min(ans,w*h); //p[3]在最左边 w=p[3][i]+max(p[1][j],p[2][k]); h=max(p[3][i^1],p[1][j^1]+p[2][k^1]); ans=min(ans,w*h); } } cout<<ans<<' '; } }