2013年8月25日

HDU 4705 Y 树形枚举

摘要: 树形枚举--搜索题目描述:给你一棵树,要在一条简单路径上选3个不同的点构成一个集合,问能构成多少个不同的集合。解法:枚举所有结点,假设某个结点有n棵子树,每棵子树的结点个数分别为s1,s2,````sn.那么在选中该结点后,剩下的两个结点从子树上选,考虑顺序,则有方案数ans=s1*(sum(si)-s1)+s2*(sum(si)-s2)+```+sn*(sum(si)-sn),化简得ans=sum(si)^2-sum(si^2).实际上,另外两个点选了(1,2)和(2,1)对于集合{a,b,c}而言是一样的,所以方案数应该为ans/2。而一个结点的子节点的总和为n-1。只要求sum(si^2 阅读全文

posted @ 2013-08-25 20:33 allh123 阅读(158) 评论(0) 推荐(0)

HDU 4597 记忆化搜索

摘要: ²博弈取牌—记忆化搜索题目描述:有两副带有数字的牌,(数字>0)两人轮流取,取中了某张牌,自己的分数就加上牌上的数字,但只能从两端取,每人都会用最优的策略使得自己的分数最高。问A先取,他能得到的最高的分数。解法:记忆化搜索,对于第一、二副牌的左右端点分别为fr1,ta1,fr2,的情形,某个人能拿到的分数的最大值这次取走牌fr1,ta1,fr2,ta2中的最大值,牌的数目减1,问题规模被缩小。边界条件为当没有牌时为0。因为两个人都是这么思考,可抽象成一个人。当总分数为sum时,我能得到的分数会是sum-对手能拿到的分数。代码实现:intdp[N][N][N][N];//初始值为 阅读全文

posted @ 2013-08-25 17:44 allh123 阅读(261) 评论(0) 推荐(0)

HDU 4599 概率DP

摘要: 先推出F(n)的公式:设dp[i]为已经投出连续i个相同的点数平均还要都多少次才能到达目标状态。则有递推式dp[i] = 1/6*(1+dp[i+1]) + 5/6*(1+dp[1]).考虑当前这一次掷色子,有1/ 6的概率投的和前面的一样,有5/6的概率不一样,不一样就要重新投,就到了dp[1]的状态,这里投了一次,所以要加1.边界有dp[0] = dp[1]+1,dp[n] = 0;可以这么说,H[n]应该是6*F[n]的,随便YY一样。更严谨的话就是一样要去推,递推式如下,设dp[i]为已经连续i次投出1后平均还要多少次才能达到目标状态。有递推式dp[i] = 1/6*(dp[i+1]+ 阅读全文

posted @ 2013-08-25 17:40 allh123 阅读(827) 评论(0) 推荐(0)

导航