(树形DP)Strategic game POJ - 1463】的更多相关文章

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…
题目链接 依旧是树形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>…
题意: 给你一棵树,树的每一个节点可以守护与其相连的所有边,问你最少用多少个节点可以守护这整棵树 思路: 仔细思考不难发现,要想守护一条边,边的两个端点必须有一个可以被选(两个都选也可以),然后这个问题就变成了翻版的没有上司的舞会 定义: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][…
//题意:就是你需要派最少的士兵来巡查每一条边.相当于求最少点覆盖,用最少的点将所有边都覆盖掉//题解://因为这是一棵树,所以对于每一条边的两个端点,肯定要至少有一个点需要放入士兵,那么对于x->y这一条边//dp[x][0]=0 表示在x这一点上不放人士兵//dp[x][1]=1 表示在x这一个点上放入士兵//那么就有//dp[x][0]+=dp[y][1];//dp[x][1]+=min(dp[y][0],dp[y][1]);//注意这一道题不需要建立一个图,然后再去dfs,因为题目上就是…
题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚会的总活跃指数最大. 解题思路: 任何一个点的取舍可以看作一种决策,那么状态就是在某个点取的时候或者不取的时候,以他为根的子树能有的最大活跃总值.分别可以用f[i,1]和f[i,0]表示第i个人来和不来. 当i来的时候,dp[i][1] += dp[j][0];//j为i的下属 当i不来的时候,dp…
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…
题意+题解: 1 //5 2 //1 1 3 //2 1 4 //3 1 5 //1 1 6 //给你5个点,从下面第二行到第五行(称为i行),每一行两个数x,y.表示i和x之间有一条边.这一条边的长度为y 7 //你需要找出来每一个点与所有点相距的最大值.并且在最后输出. 8 //要注意这是一棵树,为什么这样说呢.因为你只有n-1条边,而且每一个点都至少有一条边 9 10 //这样的话我们可以用bfs找出来随意一个点x距离其他点的距离.然后找到其中那个与x相距最大的点x1,再用他去跑一遍bfs…
题意: 给定一棵树, 问最少要占据多少个点才能守护所有边 分析: 树形DP枚举每个点放与不放 树形DP: #include<cstdio> #include<iostream> #include<cstring> using namespace std; ; ]; //用DP[i][0]来表示该点没有放兵,以这个点为根的子树所需的最少兵数. //用DP[i][1]来表示该点放兵,以这个点为根的子树所需的最少兵数. int father[maxn]; //记录每个节点父亲…
题目地址: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…