本文主要是介绍HDU 1249 三角形(递推),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:点击打开链接
题目分析: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 [n] 已经截出的面,加上新增三角形一定会增加的3个角(face),
f[n]=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[n]);
}
return 0;
}
这篇关于HDU 1249 三角形(递推)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!