Brief description:
… 点权最大团。。要求点数至少是 2/3 * n。。
Analysis:
… 比赛时觉得用最大团模板可以秒。。于是加了最优剪枝就交了。。(。TLE 。。
。。赛后 CLJ 在群里面讨论了一下她的做法。。大概是:。。
Yuuka Kazami(12xxxxxxxx) 1:59:37
我的做法是这样的。。
两个点没有边。。
枚举哪个不在团里。
那么每次少一个点。。。
http://community.topcoder.com/stat?c=problem_solution&rm=316166&rd=15491&pm=11705&cr=22840511
//}/* .................................................................................................................................. */
const int N = 60;
int s[N], w[N]; bool G[N][N];
int _sz, n, res;
void dfs(int a = 0, int b = 0, int c = n - _sz + 1, int ww = w[0] + s[0], LL bad = 0){
if (!c || ww < res) return;
if (a == n) res = ww;
else if (a == b) dfs(a+1, 0, c, ww, bad);
else {
if (G[a][b] || _1(bad, a) ||_1(bad, b)) dfs(a, b+1, c, ww, bad);
else {
dfs(a, b+1, c-1, ww-w[a], bad|_1(a));
dfs(a, b+1, c-1, ww-w[b], bad|_1(b));
}
}
}
class MagicMolecule {
public:
int maxMagicPower(vector <int> magicPower, vector <string> magicBond) {
REP_C(i, n = SZ(magicPower)) w[i] = magicPower[i];
s[n-1] = 0; DWN(i, n, 0) s[i] = s[i+1] + w[i+1];
_sz = ceil(2*n, 3); REP_2(i, j, n, n) G[i][j] = magicBond[i][j] == 'Y';
res = -1, dfs();
return res;
}
};
复杂度有待分析?。
。。。和原题相比。。只增加了规模的限制条件。。在存在大量不合法的搜索分治时。。会极大的限制最优剪枝的发挥。。。
。。而这种搜索方法则很妥善的利用了这个信息。。
External link:
http://community.topcoder.com/stat?c=coder_room_stats&rd=15491&cr=22727863




Alca
Amber
Belleve Invis
Chensiting123
Edward_mj
Fotile96
Hlworld
Kuangbin
Liyaos
Lwins
LYPenny
Mato 完整版
Mikeni2006
Mzry
Nagatsuki
Neko13
Oneplus
Rukata
Seter
Sevenkplus
Sevenzero
Shirleycrow
Vfleaking
wangzhpp
Watashi
WJMZBMR
Wywcgs
XadillaX
Yangzhe
三途川玉子
About.me
Vijos
