1. 程式人生 > >Hdoj 2050.折線分割平面 題解

Hdoj 2050.折線分割平面 題解

amp space 很多 __int64 images 折線 namespace mode 產生

Problem Description

我們看到過很多直線分割平面的題目,今天的這個題目稍微有些變化,我們要求的是n條折線分割平面的最大數目。比如,一條折線可以將平面分成兩部分,兩條折線最多可以將平面分成7部分,具體如下所示。
技術分享圖片

Input

輸入數據的第一行是一個整數C,表示測試實例的個數,然後是C 行數據,每行包含一個整數n(0<n<=10000),表示折線的數量。

Output

對於每個測試實例,請輸出平面的最大分割數,每個實例的輸出占一行。

Sample Input

2
1
2

Sample Output

2
7

Author

lcy

Source

遞推求解專題練習(For Beginner)


思路

先考慮如果是直線的情況,第N條直線最多產生\(N-1\)個交點,分割的部分增加了\(()(N-1)+1 = N\)

現在看折線可以理解為2條直線:

  • 其中一條和另一條折線的部分各產生\((N-1)\),就是\(2*(N-1)\),折線有2條直線,也就是說最後答案是最多產生\(2*2*(N-1)\)個交點,多增加了\(2*2*(N-1)+1\)個部分

所以可得遞推式為:\(f[i] = f[i-1] + 4*(i-1) + 1;\)

初始條件:\(f[1]=2\)

代碼

#include<bits/stdc++.h>
using namespace std;
__int64 f[10010];
int main()
{
    int t;
    
    f[1] = 2; f[2] = 7;
    for(int i=3;i<=10000;i++)
        f[i] = f[i-1] + 4*(i-1) + 1;
    
    cin >> t;
    while(t--)
    {
        int tmp;
        cin >> tmp; 
        cout << f[tmp] << endl;
    }
    return 0;   
}

Hdoj 2050.折線分割平面 題解