平面分割(动态规划)


同一平面内有n(n≤500)条直线,已知其中p(p≥2)条直线相交于同一点,则这n条直线最多能将平面分割成多少个不同的区域?
input:
两个整数n(n≤500)和p(2≤p≤n)
out:
一个正整数,代表最多分割成的区域数目。
eg:
12 5
out73

#include
int main(){
    int n,p;
    scanf("%d%d",&n,&p);
    int num=2*p;
    for(int i=p+1;i<=n;i++){
        num+=i;
        printf("E%d\n",num);
    }
    printf("%d",num);
}
#include
int main(){
    int n,p;
    scanf("%d%d",&n,&p);
    int i,dp[n]={0};//dp
    dp[p]=2*p;
    for(i=p+1;i<=n;i++){
        dp[i]=dp[i-1]+i;
    }
    printf("%d",dp[n]);
}

划分一条直线把平面化成两部分,其实是加1因为原来本身占一部分,
当能N条直线相交一点时,有2*N个平面,(因为直线划分原来每次多一部分)
当有不相交的时候,就是递归,有第n条不相交最多是加N因为相当于和每条有交点,就是把原来的部分加一就是加N