HDU2050 折線分割平面【基礎DP】
阿新 • • 發佈:2018-11-09
折線分割平面
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 39327 Accepted Submission(s): 26212
Problem Description
我們看到過很多直線分割平面的題目,今天的這個題目稍微有些變化,我們要求的是n條折線分割平面的最大數目。比如,一條折線可以將平面分成兩部分,兩條折線最多可以將平面分成7部分,具體如下所示。
Input
輸入資料的第一行是一個整數C,表示測試例項的個數,然後是C 行資料,每行包含一個整數n(0<n<=10000),表示折線的數量。
Output
對於每個測試例項,請輸出平面的最大分割數,每個例項的輸出佔一行。
Sample Input
2
1
2
Sample Output
2
7
Author
lcy
Source
問題連結:HDU2050 折線分割平面
解題思路:
1、先分析下直線分割平面的情況,增加第n條直線的時候,跟之前的直線最多有n-1個交點,此時分出的部分多出(n-1)+1 。
2、折線也是同理,f(1)=2,先畫好前面n-1條折線,當增加第n條拆線時,此時與圖形新的交點最多有2*2*(n-1)個,所以分出的部分多出了2*2*(n-1)+1所以推出f(n)=f(n-1)+4*(n-1)+1,n>=2
https://blog.csdn.net/a576323437/article/details/6163850
AC的C++程式碼:
#include<iostream> using namespace std; const int N=10010; long long f[N]; void solve(int n) { f[1]=2; for(int i=2;i<n;i++) f[i]=f[i-1]+4*(i-1)+1; } int main() { int n,m; solve(N); scanf("%d",&n); while(n--){ scanf("%d",&m); printf("%lld\n",f[m]); } return 0; }