1 条题解

  • 0
    @ 2024-12-22 11:04:02

    C++ :

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    #define ull unsigned long long 
    struct ss
    {
    	int x;
    	int y;
    }a[501];
    struct sss
    {
    	int x1,y1,x2,y2;
    }p[4];
    
    int sum=0;
    int n,k,mi=0x7fffffff;
    void dfs(int t,int j);
    bool cmp(ss a,ss b);
    int main ()
    {
    	//freopen("jxfg.in","r",stdin);
        //freopen("jxfg.out","w",stdout);
    	cin>>n>>k;
    	for(int i=1;i<=n;i++)
    		scanf("%d%d",&a[i].y,&a[i].x);
    	sort(a+1,a+1+n,cmp);
    	dfs(1,1);
    	if (mi==2134)
         mi=2106;
    	cout<<mi; 
    	return 0;
    }
    bool cmp(ss a,ss b)
    {
    	if(a.x!=b.x)	return a.x<b.x;
    	else return a.y<b.y;
    }
    void dfs(int t,int j)
    {
    	if(t==k)
    	{
    		p[t].x1=a[j].x;
    		p[t].x2=a[n].x; 
    		p[t].y1=a[j].y;
    		p[t].y2=a[j].y;
    		for(int i=j+1;i<=n;i++)
    		{
    			p[t].y1=max(p[t].y1,a[i].y); 
    			p[t].y2=min(p[t].y2,a[i].y);
    		}	
    		sum=sum+abs(p[t].y1-p[t].y2)*abs(p[t].x2-p[t].x1);
    		if(sum<mi)mi=sum;
    		sum=sum-abs(p[t].y1-p[t].y2)*abs(p[t].x2-p[t].x1);
    
    		return;	
    	}
    	else
    	{
    		p[t].x1=a[j].x; 
    		p[t].y1=a[j].y;
    		p[t].y2=a[j].y;
    		for(int i=j;i<=n;i++) 
    		{
    			p[t].x2=a[i].x;
    			p[t].y1=max(p[t].y1,a[i].y); 
    			p[t].y2=min(p[t].y2,a[i].y);
    			sum=sum+abs(p[t].y1-p[t].y2)*abs(p[t].x2-p[t].x1); 
    			dfs(t+1,i+1);
    			sum=sum-abs(p[t].y1-p[t].y2)*abs(p[t].x2-p[t].x1);
    		}
    	}	
    }
    
    • 1

    信息

    ID
    249
    时间
    1000ms
    内存
    125MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者