題意
n*n的矩陣中,有空地和牆,放置機械人能攻擊到垂直和水平地方(有牆則被隔絕),問最多能放多少機械人,相互之間不攻擊
解題思路
最大獨立集, 對於實際頂點應該是除去牆。 然後貼模板~~
view code
#include#include#define n 50
bool
flag[n], a[n][n];
intans, cnt[n], group[n], n, m, vis[n];
bool dfs( int u, int
pos )
}}
if( pos >ans )
return0;
} void
maxclique()
} char
mp[n][n];
intnum[n][n];
intmain()
for(int i = 1; i <= m; i++)
for(int j = 1; j <= m; j++)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if( i == j ) a[i][j] = 0
;
else a[i][j] ^= 1
; maxclique();
if( ans < 0 ) ans = 0
; printf(
"%d\n
", ans );
}
}
ZOJ1002解題報告
題目如下 zoj1002 題目大意 在乙個最大為4 4的方格內建blockhouse 碉堡 但是有條件 1.兩個及以上blockhouse不能位於同一行或者同一列 2.如果有wall,兩個blockhouse可以位於其兩側 3.blockhouse只能建在空地 注意的點 1.多次輸入 輸入0時,結束...
樹的最大獨立集
include include includeusing namespace std ifstream fin c data19.in struct node int data int c int gc struct node parent struct node left struct node ...
樹的最大獨立集
題意 對於一棵有n個結點的無根樹,選出盡量多的結點,使得任何兩個結點均不相鄰 稱為最大獨立集 sol 樹形dp 由於每個點只由其兒子或者孫子決定 二者的最大值 所以我們可以深搜一遍,回溯的時候用當前節點更新其父親以及父親的父親 因為此時該節點的值已經被我們計算出來了 這種由已知貢獻給未知的方法稱為刷...