poj 1463 Strategic game】的更多相关文章

题目地址:http://poj.org/problem?id=1463 题目: Strategic game Time Limit: 2000MS   Memory Limit: 10000K Total Submissions: 7929   Accepted: 3692 Description Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solu…
题目链接:http://poj.org/problem?id=1463 题意:给出一个无向图,每个节点只有一个父亲节点,可以有多个孩子节点,在一个节点上如果有一位战士守着,那么他可以守住和此节点相连的边.求最少战士数量. 解法:树形DP的入门级题目. 简单说明:f[i][0]表示以i节点为根没有战士守卫的情况,f[i][1]则表示有战士守卫 #include<iostream> #include<cstdio> #include<cstring> #include<…
Description Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solution fast enough and then he is very sad. Now he has the following problem. He must defend a medieval city, the roads of which form a tree…
这题做的心塞... 整个思路非常清晰,d[i][0]表示第i个结点不设置监察的情况下至少需要的数量:d[i][1]表示第i个结点设置检查的情况下的最小需要的数量. 状态转移方程见代码. 但是万万没想到的是,在实现过程中修改了4遍代码,wa了若干次才AC.... 下面来总结一下各种wa代码: 版本1:开二维数组存储树(本质上是邻接矩阵存储,把树存储成图),报错TLE.这时候第一感觉是每次更新d[i]的时候都需要遍历一遍邻接表中的所有结点不管是否是子节点都需要遍历.也就是完整的n*n复杂度.因此有了…
题意: 给定一棵树, 问最少要占据多少个点才能守护所有边 分析: 树形DP枚举每个点放与不放 树形DP: #include<cstdio> #include<iostream> #include<cstring> using namespace std; ; ]; //用DP[i][0]来表示该点没有放兵,以这个点为根的子树所需的最少兵数. //用DP[i][1]来表示该点放兵,以这个点为根的子树所需的最少兵数. int father[maxn]; //记录每个节点父亲…
B - Strategic game POJ - 1463   题目大意:给你一棵树,让你放最少的东西来覆盖所有的边   这个题目之前写过,就是一个简单的树形dp的板题,因为这个每一个节点都需要挺好处理的. 这个树形dp是从底往根部来递推,所以每一个点,都是由它的根节点来递推的. 如果一个根节点的子节点放了东西,那么这个根节点就可以有选择,但是如果没有放东西,那么这个根节点就必须放东西. E - Cell Phone Network POJ - 3659   题目大意:给你一棵树,让你用最小的东…
Strategic game Time Limit: 2000MS   Memory Limit: 10000K Total Submissions: 7490   Accepted: 3483 Description Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solution fast enough and then he is very sad…
Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solution fast enough and then he is very sad. Now he has the following problem. He must defend a medieval city, the roads of which form a tree. He has to…
题意: 给你一棵树,树的每一个节点可以守护与其相连的所有边,问你最少用多少个节点可以守护这整棵树 思路: 仔细思考不难发现,要想守护一条边,边的两个端点必须有一个可以被选(两个都选也可以),然后这个问题就变成了翻版的没有上司的舞会 定义:dp[i][0]表示不选i,守护其子树需要多少点   dp[i][0]表示选上i,守护其子树需要多少点 状态转移方程: dp[i][0] =  ∑dp[j][1]  (i为j的父亲节点)     dp[i][1] = 1+∑min(dp[j][1],dp[j][…
题目链接 依旧是树形dp啦,一样的找根节点然后自下而上更新即可 设\(dp_{i,0}\)表示第i个不设,\(dp_{i,1}\)表示第i个设一个,容易得到其状态转移 \(dp_{i,0} = \sum{dp_{j,1}}(j为i的儿子节点)\) \(dp_{i,1} = 1 + \sum{min(dp_{j,0}, dp_{j,1})}(j为i的儿子节点)\) #include<iostream> #include<vector> #include<algorithm>…