分类讨论——NCPC 2019 B

把情况考虑清楚,分类讨论不太复杂

第一种情况: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<<'
';
    }
}
原文地址:https://www.cnblogs.com/zsben991126/p/12814242.html