转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud
题目意思:从1,2,3,……,n中选出3个不同的整数使其构成一个三角形,有多少种方法?
分析:
枚举最长边c,设另外两条边为a,b,则a+b>c,即c>a>c-b,根据这个不等式,求出解的个数,注意去重,以及去掉a=b的情况
1 #include <iostream> 2 using namespace std; 3 unsigned long long dp[1000010]; 4 int main() 5 { 6 ios::sync_with_stdio(false); 7 dp[3]=0; 8 for(unsigned long long i=4;i<1000001;i++) 9 { 10 dp[i]=dp[i-1]+((i-1)*(i-2)/2-(i-1)/2)/2; 11 } 12 int x; 13 while(cin>>x&&x>=3) 14 { 15 cout<<dp[x]<<endl; 16 } 17 return 0; 18 }