http://acm.hdu.edu.cn/showproblem.php?pid=2050
题目描述:我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。
解题思路:这道题目与直线分割平面很是类似,都是采用了递推的思想。首先我们先看单条直线分割平面的情况。在添加第n条直线时,最多会有其他直线产生(n-1)个交点。因此会将平面多分为(n-1)+1个平面。此时直线分割平面的递推表达式便有:f[n] = f[n-1] + n;
折线与直线相类似,在增加第n条折线时,最多会增加2*2(n-1)个交点,因此平面会增加4(n-1)+1个。此时折线分割平面的递推表达式有: f[n] = f[n-1] +4*(n-1)+1;
c++代码:
#include<iostream> using namespace std; #define N 10005 int main() { ios::sync_with_stdio(false); int n,f[N]; f[1] = 2; f[2] = 7; for(int i = 3; i < N;i++){ f[i] = f[i-1]+4*(i-1)+1; } cin>>n; while(n--) { cin>>a; cout<<f[a]<<endl; } return 0; }