准备考研复试算法题 遇到了背包问题 之前看刘未鹏的《暗时间》和php面试题算法里都有提到背包问题
递归算法的难度还是蛮大的orz
明天继续理清一下思路。
背包问题:设有不同价值、不同重量的物品n件,求从这n件物品中选取一部分物品的方案,使选中物品的总重量不超过指定的限制重量,但选中物品的价值之和为最大。编写一个程序求解背包问题。
递归算法伪代码:
find(物品 i,当前选择已达到的重量和tw,本方案可能达到的总价值为tv)
{
/*考虑物品i包含在当前方案中的可能性*/
if(包含物品i是可接受的)
{
将物品i包含在当前方案中;
if(i<n-1)
find(i+1,tw+物品i的重量,tv);
else /*又一个完整方案,因它比前面的方案好,以它作为最佳方案*/
以当前方案作为临时最佳方案保存;
恢复物品i不包含状态;
}
/*考虑物品i不包含在当前方案中的可能性*/
if(不包含物品i仅是可考虑的)
if(i<n-1)
find(i+1,tw,tv-物品i的价值);
else /*又一个完整方案,因它比前面的方案好,以它作为最佳方案*/
以当前方案作为临时最佳方案保存;
}
还遇到了一个问题n皇后还不能理解 或者说心没静下来仔细思考答案给出的递归算法。。递归算法很容易引起逆反心理和为难心理 。要克服啊 硬着头皮上。
n皇后问题: 编写一个程序,求解皇后问题:在n*n的方格棋盘上,放置n个皇后,要求每个皇后不同行、不同列、不同左右对角线。
要求:1)皇后的个数n由用户输入,其值不能超过20.
2)采用递归方法求解