Hdoj 2050.折線分割平面 題解
阿新 • • 發佈:2018-10-13
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.折線分割平面 題解