求一个图的哈密顿路径的最大权及其路径数。显然状态压缩+DP。
dp[v][u][S] 表示从v走到当前顶点 u且走过的顶点集合是S的 最大权值和方案数
这题我用记忆化搜索,从终点开始递归进行,感觉这样比较容易转移。
就是搜索一个状态可以从哪些状态转移过来,顺便统计方案数。搜索时要注意一些细节,转移要合法还有可能某个状态是无解的要跳过。
还有一些细节什么什么的。。
1 #include2 #include 3 #include 4 using namespace std; 5 bool G[13][13]; 6 int n,val[13]; 7 __int64 d[13][13][1<<13],cnt[13][13][1<<13]; 8 __int64 dfs(int u1,int u2,int S){ 9 if(d[u1][u2][S]!=-1) return d[u1][u2][S];10 int res=0;11 for(int u0=0; u0 >u0)&1)==0) continue;13 if(dfs(u0,u1,S^(1< >u0)&1)==0) continue;20 if(dfs(u0,u1,S^(1< >1);68 }69 return 0;70 }