Uva 11401 数三角形

题目链接:https://uva.onlinejudge.org/external/114/11401.pdf

题意:1~n个数里面挑3个不同的数,组成一个三角形。求方案数。

分析:

令最长的边为X,那么他能所组成的三角形个数为C(X),其余两条边是Y,Z;

但是,这并不是答案,因为里面有y=z的情况;

这里都有一个:总共有x-1-x/2 + 1 -1 个y=z;

而且,当我的y=2,z=x-1时,最后面的z=x-1,y=2也算了一遍。

于是:

然后递推求和。

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 long long f[1000010];
 6 
 7 int main()
 8 {
 9     f[3] = 0;
10     for(long long x=4;x<=1000000;x++)
11         f[x] = f[x-1] + ((x-1)*(x-2)/2-(x-1)/2)/2;
12 
13     int n;
14     while(cin>>n) {
15         if(n<3) break;
16         cout<<f[n]<<endl;
17     }
18 
19     return 0;
20 }
原文地址:https://www.cnblogs.com/TreeDream/p/6387773.html