给你长度为1,2...n的边,可以构造出多少个三角形,每条边可以使用多次,构造出的三角形每条边不能相等
刚开始碰到也是无从下手,暴力求解的话不出意外应该是过不了的,否则这题意义何在
根据经验是要找出递推公式,怎么找呢?
不管别的,先用fn表示边长最大为n可以构造出的三角形个数
显然f1=f2=f3=0 f4=1
我们一定可以写出 fn=fn-1+k k为长度为n的边和1 2 3 4 ... n-1 这些边构成的三角形个数
那么这个k是比较好算的,这个计算结果分两种情况,
当n为偶数时,k=(n-2)(n-2)/4
当n为奇数时,k=(n-3)(n-1)/4
那么这个题也就迎刃而解了
#include<iostream>
using namespace std;
int main()
{
long long f[1000005];
int n;
f[3] = 0;
f[4] = 1;
for (long long i = 5; i <= 1000000; i++)
if (i & 1) f[i] = f[i - 1] + (i - 3)*(i - 1) / 4;
else f[i] = f[i - 1] + (i - 2)*(i - 2) / 4;
while (cin >> n)
{
if (n < 3) break;
cout << f[n] << endl;
}
}