思路:由於最多只有15個".",可以直接列舉放置的位置,然後判斷是否能夠全部點亮即可。需要注意的是,有乙個特殊的light,也需要列舉它的位置以及放置的方向。
#include #include #include #include using namespace std;
const int max_n = (200 + 22);
int n, m;
struct node
node(int _x, int _y) : x(_x), y(_y) {}
}node[17];
int n;
char g[max_n][max_n];
/*if kind == 0: 0 degree.
if kind == 1: 90 degree.
if kind == 2: 180 degree.
if kind == 3: 270 degree.
*/bool judge(int x, int y)
int find(int x, int y)
return -1;
}bool vis[17];
bool gao(int s, int kind)
else if (kind == 1) else if (kind == 2) else if (kind == 3)
for (int j = 0; j < n; ++j)
} bool tag = true;
for (int i = 0; i < n; ++i) if (!vis[i])
if (tag) return true;
} return false;
}int main()
} if (n == 0)
int ans = -1;
for (int s = 0; s < (1 << n); ++s)
ans = (ans == -1 ? cnt : min(cnt, ans));}}
} printf("%d\n", ans);
} return 0;
}
hdu 4770 狀壓 列舉
長記性了,以後對大陣列初始化要注意了!140ms 原來是對vis陣列進行每次初始化,每次初始化要200 200的複雜度 一直超時,發現沒必要這樣,直接標記點就行了,只需要乙個15的陣列用來標記,vis陣列用來對映座標就行了 然後就是暴力加了一點優化,下面沒有加優化。include include d...
hdu 1692 列舉 剪枝
題意 給你一些井的資訊,井中原有的水,當井中的水滿足一定量後會被破壞並且這些水全部流入下乙個井中,用多少能量能直接破壞這個井。然後問要想破壞第n口井至少要多少能量。解題思路 這題首先是要找到從哪口井開始破壞,因為要破壞第n口井,要麼直接破壞n,要麼n之前有連續的幾口井一同被破壞,如果中間出現了乙個不...
HDU3721 列舉 最長路
題意 給你一顆n個節點n 1條邊的樹,每條邊都有乙個權值,現在讓你任意移動一條邊然後把這條邊連線到任意兩個點上,最後問你怎樣移動才能使樹上相距最遠的兩個點距離最小。思路 先求出樹的最長路,然後列舉移動最長路上的所有邊,移走這條邊後,原樹必定分為不連線的兩顆子樹,分別求這兩顆子樹的最長路,然後分別找到...