题目: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同时出现的情况了。
然后再选出最大值,即可。
代码如下: