题目:http://www.topcoder.com/stat?c=problem_statement&pm=2402&rd=5009
如果没有形成一个环,那么题目很简单,就是一个最基础的DP题。
只要用一个数组dp,dp[i]代表0...i之间的所能筹到的最大款项,dp[v.size()-1]则为所求。
形成环以后,第0个住房和第n-1个住户就不能同时同现了。
可以把数组分成两个。
一个为v[0...n-2]
一个为v[1...n-1]
然后,分别对两个数组进行上述算法,则不可能出现0和n-1同时出现的情况了。
然后再选出最大值,即可。
代码如下:

本文解析了一个TopCoder平台上的经典劫富济贫问题,通过动态规划解决环形和非环形数组中选择非相邻元素以获得最大总和的问题。提供了详细的算法思路和C++实现代码。
1291

被折叠的 条评论
为什么被折叠?



