1290 ACM 数学

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1290

思路:先在草稿纸上画,找规律。

规律:

a[n],b[n],c[n],分别代表一条直线分成的段数,二维的块数,三位的块数。

先考虑二维(直线)的情况,n个点把直线分成的份数a[n]=n+1。二维(平面)的情况,考虑n条直线把一个平面分成的份数最多(表示为b[n])时,第k条直线应该与前k-1条直线相交于不同的k-1个点,这k-1个点将第k条直线分成a[k-1]部分,每一部分会把所在的平面分成两份,所以有b[n]=b[n-1]+a[n-1]。

同理三维情况c[n]=c[n-1]+b[n-1]。(每次要最大,我们都希望与每块都相交。

Code:

#include <cstdio>
#include<iostream>

using namespace std;

int main()
{
    int b[1002],c[1002];
    int i,n;
    while(cin>>n&&n>0)
    {
        b[1]=c[1]=2;
        for(i=2;i<=1005;i++)
            {
                b[i]=b[i-1]+i;
                c[i]=c[i-1]+b[i-1];
            }
        cout<<c[n]<<endl;
    }
    return 0;    
}

 

posted @ 2018-10-01 22:58  CheeseIce  阅读(132)  评论(0编辑  收藏  举报