您的位置:首页 > 其它

HDU 1249 三角形(递推)

2014-03-31 21:00 267 查看
题目链接:点击打开链接

题目分析:ACM中数学类题目,要么是结论性的,要么就是递推,所以先画几个图形看看

n=1 ----------> face =2;

n=2 -----------> face =8;

n=3 -----------> face =20;

每条边最多与前面已画的(n—1)个三角形的各两条边相交,第n个三角形每条边最多与2*(n-1)条边相交。对于每条边,它所截出的区域(不算第n个三角形的角)有2*(n-1)-1个,于是3条边可截出6*(n-1)-3个区域,再加上f
已经截出的面,加上新增三角形一定会增加的3个角(face),

f
=f[n-1]+3+6*n-9=f[n-1]+6*(n-1);

所以

另外附上一位仁兄的证明





#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
__int64 f[10005];
void init()
{
    f[1]=2;
    for(int i=2;i<=10000;i++)
    f[i]=f[i-1]+6*(i-1);
}
int main()
{
    int t,n;
    init();
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        printf("%I64d\n",f
);
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: