摘要: 树形DP,f[j][i]表示有j个robot遍历i及其子树并且在此子树返回地球所需的最小值,但还有k个robot遍历子树i及其子树,再返回父亲节点m个机器人这种情况,但是可以证明这种情况一定不会是最优解,所以不予考虑。还有一个地方就是f[0][i]表示用0个robot遍历意思就是说用n个机器人遍历此子树,再返回,可知n=1,道理和前面那种情况的道理一样。在求f[i][j]是用的是分组背包的思想,刚开始多用了一个数组g[][],来实现这个过程,后来看了其他人的代码,想了一想,可以用滚动数组优化,用f[i][j]就可以实现这个过程了#include <iostream> #includ 阅读全文
posted @ 2013-04-16 19:56 LJ_COME!!!!! 阅读(109) 评论(0) 推荐(0)
摘要: 状态压缩DP,f[j][i]表示前i行棋子放置状态状态为j的方法数就0<=j<=1<<n,比如j=01010000,表示前i行第5列和第7列放置了棋子的方法总数,具体的递推过程代码如下#include <iostream> #include <cstdio> #include <cstring> using namespace std; int n,k; int num[10],f[1<<8][10],vis[10][10],pa[1<<8]; int main() { while(~scanf("% 阅读全文
posted @ 2013-04-16 14:01 LJ_COME!!!!! 阅读(127) 评论(0) 推荐(0)