uva11401(トライアングルカウント)

タイトル効果:1,2,3から計算は、...、3つのn個の異なる整数はその長さに三角形の辺の数として形成することができるように選択します。

アイデア:一般的な方法は、3重ループを必要とすることにより、時間複雑度はO(N ^ 3)であり、確かにタイムアウト、数学的方法は、したがって、問題を分析するために使用することができます。提供される三角形の最大辺の長さがx C(X)番目であり、他の2辺の長さyを有し、それぞれが、Z、XYを得ることができる<Z <X、X列挙固定Y、番号0 + 1 + 2 +カウント.. 。+(X-2)= (X-1)(X-2)/ 2。YがZを=それ以外回忘れる場合を含む上記の溶液。X-1列挙にX / 2 + 1からY = Z Yの場合にははるかにあるが(X-1)逆の/ 2、その結果C(X)=((X -1)*(X-2) / 2-(X-1)/ 2)/ 2。

上記の分析によって得ることができる、三角形のn個を超えない最大の辺の長さをf(n)はC(= 1 )+ C(2)+ ... + C(N)。

1の#include <stdio.hの>
 2  ロング ロング F [ 1000005 ]、X;
 3  INT メイン()
 4。 {
 5。     INT N-;
 6      F [ 3。 =] 0 ;
 7      のための(X = 4 ; X <= 1000000 ; X ++ )// オフ+再帰的計算
。8          F [X] = F [X- 1 ] +((X- 1)*(X- 2)/ 2 - (X- 1)/ 2)/ 2 ;
 9。     一方、( scanf関数("%のD "&N)== 1 10      {
 11          であれば(N < 3破壊;
 12          のprintf(" %LLDする\ n " 、F [N]);
 13      }
 14      リターン 0 ;
 15 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/ljy08163268/p/11705837.html