HDU 2050 折线分割平面 简单DP/图形递推
问 条折线最多能把平面分成几部分?
设 为 条折线的结果,则
当有 条折线时,区域数为 ,再加一条折线时,为了能够产生尽可能多的区域,折线的两边要和 条折线的边,即 条线相交,能够产生 条线段和两条射线,每新增加一条线段或一条射线,就会将原来这部分平面一分为二,又因为折线角处形成的两条线段只能多产生一个面,所以要再减一,得递推公式:
代码如下:
#include<iostream>
#include<cstdio>
//#define WINE
#define MAXN 10005
using namespace std;
typedef long long ll;
int T,n;
ll dp[MAXN]={0,2};
int main(){
#ifdef WINE
freopen("data.in","r",stdin);
#endif
for(int i=2;i<MAXN;i++)
dp[i]=dp[i-1]+4*i-3;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
printf("%lld\n",dp[n]);
}
return 0;
}