HDU 4462(狀態壓縮,列舉)

2021-08-07 02:04:04 字數 927 閱讀 1150

題目:hdu-4462

題目大意:

n*n(<=50)的地圖上有稻草,有m(<=10)個點沒有稻草可以放稻草人,問最少放幾個稻草人,能守衛所有稻草。不能守衛所有稻草輸出-1。

思路:列舉所有情況,就是列舉取多少個地方放稻草人,也就是:c(n,1)+c(n,2)+……c(n,n)=1<

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

const

int inf=0x3f3f3f3f;

int vis[55][55];

int h[55];

struct node

p[55];

int ok(int x,int y,node c)

int main()

for(int i=0;icin>>p[i].r;

int ans=inf;

int s=(1

<1;//列舉的總數

//cout<<"s="//cout<<"cnt="for(int k=0;kif(ok(ii,jj,p[h[k]]))//判斷(ii,jj)這個地方是否被所有放稻草人的地方的守衛的範圍內}}

}//cout<<"num="ans=min(ans,cnt);//更新ans的最小值

}if(ans==inf)

cout

<<-1

cout

0;}

hdu4462 曼哈頓距離

題目大意 有n n個點的田野,然後有k個點是用來放稻草人的,每個稻草人對周圍滿足曼哈頓距離的莊稼有保護作用 問最小的稻草人的個數能夠保護所有莊稼,如果不能保護則輸出 1 注意的地方 1.放稻草人的點不需要計算,因為不是莊稼 2.可能存在0的解,也就是k n n時 思路 二進位制列舉所有情況,找到最小...

HDU 4462 暴力二進位制列舉

1.題目鏈結。題目大意 john有一塊農田,現在他需要在農田k個空閒的位置放置驅逐bird的scarecrows。已知每個scarecrows各異保護的範圍是距離它哈密頓距離不超過k的地方,現在給你這k個點的座標,求出最少需要放置多少個scarecrows才能保護好整片農田。2.由於k很小,不超過1...

hdu1074狀態壓縮

很明顯的狀態壓縮題目。當然了如果他的意識只有是求最小值沒有要求輸出那個輸出的順序,那麼直接用揹包,甚至是貪心都是可以做出來的,但是要求順序這個揹包的話沒有辦法吧資料記錄下來。所以用二進位制壓縮。所謂的二進位制壓縮就是用二進位制來表示事情的完成程度和狀況,比如1,就是0000001表示第乙個作業做了,...