原题:http://acm.pku.edu.cn/JudgeOnline/problem?id=1014
网上很多人说直接采用dp就可以了,但是我觉得不用那么复杂,用贪心算法+回溯+剪枝就可以了,而且特快,运行时间为0.
1.首先,将所有石子价值先加,如果sum为奇数,则返回false.
2.然后,采用贪心策略在石子中选择价值和为sum/2的组合,如果组合成功,返回true,否则false.
a).既然贪心,那当然首先选价值为6的石子,在不大于sum/2的前提下,尽量多选,假设数量为count。然后是价值为5,4,3,。。。
b).所谓回溯,就是当以上不能成功组合时,将count--,既少选一个,然后又是5,4,3,。。。
c).如果仅仅采用以上的步骤,最终答案肯定是正确的,但是肯定也会超时。因为某一价值的石子最大数量为20000,如果count--,得遍历多少啊。所以我们还要采用剪枝算法。
以第一步选择价值为6的石子为例,如果接下去的选择价值为5的石子的数量超过6个,则我们可以用5个价值为6的石子替代;同样,如果再接下去的选择价值为4的石子的个子超过3个,我们也可以用2个价值为6的石子替代,依此类推。于是我们可以得到,在有足够的价值为6的石子的前提下,设选择6的个数为count,那么必须有(sum/2 - count*6)<=(5*5+4*2+3+2*2+5)= 45.也就是回溯时count减小到一定数量不满足以上不等式时就停止,这样将剪去大部分的无用的搜索。当然,接下去的选择5,4,3,。。。都如此。
分享到:
相关推荐
北大POJ1014-Dividing【DFS】【多重背包+二进制优化】 解题报告+AC代码
poj-1002源码,没有题解,题解看博客poj-1002源码,没有题解,题解看博客poj-1002源码,没有题解,题解看博客poj-1002源码,没有题解,题解看博客
poj acm题解,包括绝大部分poj题目的题解,可以供acm爱好者学习研究
POJ部分题解
POJ题解及题目分类,共150道左右。C/C++
Poj1155 题解 , 文档 , 资料
如果你为在poj上找不到解题思路而痛苦,那么这本书可以为你带来惊喜,里面包括了poj上一部分题解题报告~
PKU OJ上的部分解题报告和源程序 分享一下
1000 1002 1003 1004 1005 1006 1007 1008 1011 1012 1013 1019 1028 1045 1046 1068 1080 1088 1163 1207 1218 1256 1298 1299 1316 1326 1401 1455 1477 1488 1503 1504 1517 1519 1547 1552 1565 1579 1607 1656 ...
经典O(n)求最长回文 acmer新手可看
ACM题解 训练指南 北大ACM题解 北大ACM训练指南 北大ACM题解训练指南 北京大学ACM题目 源代码 POJ源代码 POJ做指南
C + + language learning poj100 question bank and code
Description Businesses like to have memorable telephone numbers. One way to make a telephone number memorable is to have it spell a memorable word or phrase. For example, you can call the University ...
POJ2601 solution 题解 递推 POJ2601
POJ上的DP分类: 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740(博弈), 1742, 1887, 1926(马尔科夫矩阵,求...
北大POJ1696-Space Ant 解题报告+AC代码
POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类
复杂度n^2 b
poj经典动态规划题目解题报告,包括经典的动态规划题目20多道,可以作为学习动态规划系统的资料,包括题目: Pku acm 1179 Polygon Pku acm 1125 Stockbroker Grapevine Pku acm 1160 post office Pku ...