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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

洛谷 P1034 矩形覆盖

發(fā)布時(shí)間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷 P1034 矩形覆盖 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

P1034 矩形覆蓋

題目描述

在平面上有nn個(gè)點(diǎn)(n \le 50n50),每個(gè)點(diǎn)用一對(duì)整數(shù)坐標(biāo)表示。例如:當(dāng)?n=4n=4?時(shí),44個(gè)點(diǎn)的坐標(biāo)分另為:p_1p1?(1,11,1),p_2p2?(2,22,2),p_3p3?(3,63,6),P_4P4?(0,70,7),見(jiàn)圖一。

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

輸入輸出格式

輸入格式:

?

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個(gè)整數(shù),即滿足條件的最小的矩形面積之和。

?

輸入輸出樣例

輸入樣例#1:?復(fù)制 4 2 1 1 2 2 3 6 0 7 輸出樣例#1:?復(fù)制 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; }

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/cangT-Tlan/p/9911300.html

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。