柵欄圍大蔥 dan

2021-08-09 02:05:20 字數 1102 閱讀 9461

問題描述

m*m的方陣上有棵蔥,你要修一些柵欄把它們圍起來。乙個柵欄是一段沿著網格建造的封閉圖形(即要圍成一圈)。各個柵欄之間應該不相交、不重疊且互相不包含。如果你最多修k個柵欄,那麼所有柵欄的長度之和最小是多少?

輸入格式

第一行三個整數n,m,k。

接下來n行每行兩個整數代表某棵蔥的位置。

輸出格式

一行乙個整數代表答案。

樣例輸入1

6 1 4

1 3

4 2

4 4

6 4

樣例輸出1

18樣例輸入2

6 2 4

1 3

4 2

4 4

6 4

樣例輸出2

16 樣例解釋

你猜樹上有啥.

搜尋+奇妙的卡時竟然可以過。

通過畫圖可以知道,圍成不規則的圖形和圍成矩形花的代價是一樣的,這就把**難度降低了好多。

#include

#include

#include

#include

#include

#include

#include

#define inf 1000000000

#define ll long long

using namespace std;

intx[50],y[50],n,m,k;

int ans;

int sx[50],sy[50],mx[50],my[50],a[50];

void dfs(int t)//搜尋每棵蔥在哪個柵欄中

if(t>n)

ans=min(ans,sum);

return;

}int sum=0;

for(int i=1;i<=k;i++)

for(int i=1;i<=k;i++)

}int main()