1. 程式人生 > >1290 ACM 數學

1290 ACM 數學

pac ostream sin 我們 cst 最大 using int span

題目: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; }

1290 ACM 數學