摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1561树形dp+有依赖的背包。==分组背包。思路:思路:参考《背包九讲》分组背包:将物品分成k组,每组中有若干件物品,并且这些物品两两互斥(既对于第 i 组物品,只能选该组物品的其中一个,或者一个也不选),求在一定... 阅读全文
摘要:
看别人思路的树形分组背包。题意:给出结点数n,起点s,机器人数k,然后n-1行给出相互连接的两个点,还有这条路线的价值,要求最小花费思路:这是我从别人博客里找到的解释,因为很详细就引用了dp[i][j]表示对于以i结点为根结点的子树,放j个机器人所需要的权值和。当j=0时表示放了一个机器人下去,遍历... 阅读全文
摘要:
树形dp题意:给出n,p,一共有n个节点,要求最少减去最少的边是多少,剩下p个节点思路:典型的树形DP,dp[s][i]:记录s结点,要得到一棵j个节点的子树去掉的最少边数 考虑其儿子k 1)如果不去掉k子树,则 dp[s][i] = min(dp[s][j]+dp[k][i-j]) 0 #include#includeusing namespace std;int dp[200][200],father[200],brother[200],son[200];int n,p;void dfs(int root){ int k,i,j,temp; for(i=0;i=1;i--) ... 阅读全文
摘要:
背包Time Limit: 5000 MSMemory Limit: 32768 KTotal Submit: 111(29 users)Total Accepted: 30(25 users)Rating: Special Judge: NoDescriptionDS最近刚学会了背包。比如,给一个序列,问是否存在一个子集满足元素和为 X , DS 会用一种方法:int dp[X+1];dp[0] = 1;for (int i = 0 ;i #include int a[10000005];int main(){ int i,j,n,t; long long sum; sca... 阅读全文
摘要:
http://poj.org/problem?id=2486典型的回溯题目:特别是状态方程用三维的来标记是否要走回路。题意:一颗树,n个点(1-n),n-1条边,每个点上有一个权值,求从1出发,走V步,最多能遍历到的权值思路:树形dp,比较经典的一个树形dp。首先很容易就可以想到用dp[root][k]表示以root为根的子树中最多走k时所能获得的最多苹果数,接下去我们很习惯地会想到将k步在root的所有子结点中分配,也就是进行一次背包,就可以得出此时状态的最优解了,但是这里还有一个问题,那就是在进行背包的时候,对于某个孩子son走完之后是否回到根结点会对后面是否还能分配有影响,为了解决这个问 阅读全文
摘要:
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2086很明显的一个二分题目。因为要求精度颇高,所以需要认真的计算。比如我们看这3组数据——111001000100000100001110011100010001000011100110010000答案是——(在精度误差范围内)500000.0000000000500400000.00000000000000500000.00000000000标程的解法是二分相遇的时间,假设为RunTime这样就能够计算出DS和xiaodao奔跑的 阅读全文
摘要:
树形dp:题意:电视台发送信号给很多用户,每个用户有愿意出的钱,电视台经过的路线都有一定费用,求电视台不损失的情况下最多给多少用户发送信号。思路:树状dp。由于求的是最多多少用户,那么我们可以把用户个数当成一个状态。dp[i][j]代表i节点为根节点的子树j个用户的时候最大剩余费用。 则dp[i][j] = max(dp[i][j], dp[i][k]+dp[son][j-k]-w[i][son]); 注意两点,第一点是上面式子中的dp[i][k]必须先用一个tem[MAX]数组提取出来,因为在计算的过程中会相互影响。第二点是价值可能是负值,所以dp初始化的时候要初始化为负的最大值... 阅读全文
摘要:
树形DP题意:给出每个房间拥有的BUG数和能得到的能量数,然后给出每个房间的联通图,要到下一个房间必须攻破上一个房间,每个士兵最多消灭20个BUG,就算不足20个BUG也要安排一个士兵思路:先建立树,然后进行树形DPhttp://acm.hdu.edu.cn/showproblem.php?pid=1011 Starship TroopersTime Limit: 10000/5000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9538Accepted Submission(s): 阅读全文
摘要:
分组背包+至少一个+最多一个+随意。包之间的传值就是把上一组的背包复制到这组背包中,达到背包之间的联系。http://acm.hdu.edu.cn/showproblem.php?pid=3535AreYouBusyTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2676Accepted Submission(s): 995Problem DescriptionHappy New Term!As having become a junior, 阅读全文
摘要:
http://poj.org/problem?id=3211神奇01背包。只是有多组0-1背包,即每种颜色进行一次背包选择。> 选择的方式是先截取每种颜色总时间的一半,也就是说,至少要消耗一半的时间。> 然后用做 f[一半的时间] 数组最大值,背包之后,用总的时间减去得到的f[一半的时间]的最大值的差值,是消耗的最少时间。数组一定要开得很大。Washing ClothesTime Limit:1000MSMemory Limit:131072KTotal Submissions:8478Accepted:2636DescriptionDearboy was so busy rece 阅读全文