悬棺求调
查看原帖
悬棺求调
892084
xinxin2022楼主2024/9/15 19:04

0pts

#include<bits/stdc++.h>
using namespace std;
int n,k,ans=INT_MAX;
bool mp[505][505];
bool res[55];
struct node{
    int x,y;
}a[55];
bool cmp(node l,node r){
    if(l.x!=r.x) return l.x<r.x;
    return l.y<r.y;
}
bool check(int l,int r,int &last){
    for(int i=min(a[r].x,a[l].x);i<=max(a[r].x,a[l].x);i++){
        for(int j=min(a[r].y,a[l].y);j<=max(a[r].y,a[l].y);j++){
            if(mp[i][j]) return 0;
        }
    }
    for(int i=min(a[r].x,a[l].x);i<=max(a[r].x,a[l].x);i++){
        for(int j=min(a[r].y,a[l].y);j<=max(a[r].y,a[l].y);j++){
            mp[i][j]=1;
        }
    }
    int lt=min(a[l].x,a[r].x),rt=min(a[r].y,a[l].y);
    int lt2=max(a[l].x,a[r].x),rt2=max(a[r].y,a[l].y);
    for(int i=1;i<=n;i++){
    	if(a[i].x<=lt2&&a[i].x>=lt&&a[i].y<=rt2&&a[i].y>=rt){
			res[i]=1;
			cout<<i<<" ";
    		last++;
		}
	}
	cout<<'\n';
    return 1;
}
void check2(int l,int r,int &last){
    for(int i=min(a[r].x,a[l].x);i<=max(a[r].x,a[l].x);i++){
        for(int j=min(a[r].y,a[l].y);j<=max(a[r].y,a[l].y);j++){
            mp[i][j]=0;
        }
    }
    int lt=min(a[l].x,a[r].x),rt=min(a[r].y,a[l].y);
    int lt2=max(a[l].x,a[r].x),rt2=max(a[r].y,a[l].y);
    for(int i=1;i<=n;i++){
    	if(a[i].x<=lt2&&a[i].x>=lt&&a[i].y<=rt2&&a[i].y>=rt){
			res[i]=0;
    		last--;
		}
	}
}
void dfs(int now,int sum,int last){
    if(now>k){
        if(last!=n) return;
        ans=min(ans,sum);
        //cout<<"FUNCTION "<<sum<<'\n';
        return;
    }
    for(int i=1;i<=n;i++){
    	if(res[i]) continue;
        for(int j=1;j<=n;j++){
        	if(res[j]) continue;
        	//cout<<now<<" "<<last<<" "<<sum<<'\n';
            if(check(i,j,last)) dfs(now+1,sum+abs(a[j].x-a[i].x)*abs(a[j].y-a[i].y),last);
            else continue;
            check2(i,j,last);
        }
    }
    
}
int main(){
    cin>>n>>k;
    if(k>=n) cout<<0,exit(0);
    for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
    //sort(a+1,a+1+n,cmp);
    dfs(1,0,0);
    cout<<ans;
    return 0;
}
2024/9/15 19:04
加载中...