1. 程式人生 > >HDU 2050(折線分割平面)

HDU 2050(折線分割平面)

des print 分享 several def while 要求 earch sele

傳送門:

http://acm.hdu.edu.cn/showproblem.php?pid=2050

折線分割平面

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 37696 Accepted Submission(s): 25230


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)

Recommend lcy | We have carefully selected several similar problems for you: 1297 1465 2501 2190 1480 分析: 我們看到過很多直線分割平面的題目,今天的這個題目稍微有些變化,

我們要求的是n條折線分割平面的最大數目。
比如,一條折線可以將平面分成兩部分,兩條折線最多可以將平面分成7部分。 解題思路:1遞推遞推,先分析下直線分割平面的情況,
增加第n條直線的時候,跟之前的直線最多有n-1個交點,此時分出的部分多出了
      (n-1)+1;
     2折線也是同理,f(1)=2,f(2)=7,先畫好前面n-1條折線,
當增加第n條拆線時,此時與圖形新的交點最多有2*2(n-1)個,
所以分出的部分多出了2*2(n-1)+1   所以推出f(n)=f(n-1)+4*(n-1)+1,n>=3
code:
#include<iostream>
#include
<stdio.h> #include<algorithm> #include<math.h> using namespace std; #define max_v 10005 //f(n)=f(n-1)+4*(n-1)+1,n>=3 int main() { long long f[max_v]; f[1]=2; f[2]=7; for(int i=3;i<max_v;i++) { f[i]=f[i-1]+4*(i-1)+1; } int t; scanf("%d",&t); int a; while(t--) { scanf("%d",&a); printf("%I64d\n",f[a]); } return 0; }

HDU 2050(折線分割平面)