日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

洛谷 P1034 矩形覆盖

發布時間:2025/5/22 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷 P1034 矩形覆盖 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

P1034 矩形覆蓋

題目描述

在平面上有nn個點(n \le 50n50),每個點用一對整數坐標表示。例如:當?n=4n=4?時,44個點的坐標分另為:p_1p1?(1,11,1),p_2p2?(2,22,2),p_3p3?(3,63,6),P_4P4?(0,70,7),見圖一。

這些點可以用kk個矩形(1 \le k \le 41k4)全部覆蓋,矩形的邊平行于坐標軸。當?k=2k=2?時,可用如圖二的兩個矩形?s_1,s_2s1?,s2??覆蓋,s_1,s_2s1?,s2??面積和為44。問題是當nn個點坐標和kk給出后,怎樣才能使得覆蓋所有點的kk個矩形的面積之和為最小呢?
約定:覆蓋一個點的矩形面積為00;覆蓋平行于坐標軸直線上點的矩形面積也為00。各個矩形必須完全分開(邊線與頂點也都不能重合)。

輸入輸出格式

輸入格式:

?

n knk
x_1 y_1x1?y1?
x_2 y_2x2?y2?
... ...

x_n y_nxn?yn??(0 \le x_i,y_i \le 5000xi?,yi?500)

?

輸出格式:

?

輸出至屏幕。格式為:

11個整數,即滿足條件的最小的矩形面積之和。

?

輸入輸出樣例

輸入樣例#1:?復制 4 2 1 1 2 2 3 6 0 7 輸出樣例#1:?復制 4
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int x[51],y[51]; int n,k,val,ans=0x7f7f7f7f; struct nond{int l,r,u,d;bool flag; }v[5]; int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f; } bool jud(int i,int j){if(v[i].l<=v[j].l&&v[i].r>=v[j].l&&v[i].d>=v[j].d&&v[i].u<=v[j].d) return true;if(v[i].l<=v[j].r&&v[i].r>=v[j].r&&v[i].d>=v[j].d&&v[i].u<=v[j].d) return true;if(v[i].l<=v[j].l&&v[i].r>=v[j].l&&v[i].d>=v[j].u&&v[i].u<=v[j].u) return true;if(v[i].l<=v[j].r&&v[i].r>=v[j].r&&v[i].d>=v[j].u&&v[i].u<=v[j].u) return true;return false; } bool judge(){for(int i=1;i<=k;i++)if(v[i].flag)for(int j=1;j<i;j++)if(v[j].flag)if(jud(i,j)) return true;return false; } void dfs(int now){if(judge()) return ;val=0;for(int i=1;i<=k;i++)if(v[i].flag)val+=(v[i].r-v[i].l)*(v[i].d-v[i].u);if(val>ans) return ;if(now==n+1){ans=val;return ;}for(int i=1;i<=k;i++)if(!v[i].flag){v[i].l=y[now];v[i].r=y[now];v[i].u=x[now];v[i].d=x[now];v[i].flag=1;dfs(now+1);v[i].flag=0;}else if(v[i].flag){int a=v[i].l,b=v[i].r,c=v[i].u,d=v[i].d;v[i].l=min(v[i].l,y[now]);v[i].r=max(v[i].r,y[now]);v[i].u=min(v[i].u,x[now]);v[i].d=max(v[i].d,x[now]);dfs(now+1);v[i].l=a;v[i].r=b;v[i].u=c;v[i].d=d;} } int main(){n=read();k=read();for(int i=1;i<=n;i++)scanf("%d%d",&x[i],&y[i]);dfs(1);cout<<ans; }

?

?

轉載于:https://www.cnblogs.com/cangT-Tlan/p/9911300.html

總結

以上是生活随笔為你收集整理的洛谷 P1034 矩形覆盖的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。