uva 11401 Triangle Counting

来源:互联网 发布:券商手机炒股软件 编辑:程序博客网 时间:2024/04/29 18:04

f(n)表示在1~n的数列里取三个数,所能构成的不同三角形的个数,现在输入n求f(n)

这是白书上的一道例题。。。一般这种题都可以转换成递推的形式

f(n)=c(1)+c(2)+c(3).+....+c(n)

f(n)=f(n-1)+c(n)

所以关键是要求c(n)咯,c(n)就可以随便搞了。。我的c(n)和白书的思路不一样

#include<iostream>#include<sstream>#include<cstdio>#include<cstring>#include<cmath>#include<queue>#include<stack>#include<math.h>#include<map>#include<time.h>#include<set>#include<string>#include<vector>#include<algorithm>using namespace std;#define inf 0x7fffffff#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define max_n 10000002#define mod 1000000007#define LL  long longint n;LL dp[max_n];int main(){    dp[1]=dp[2]=dp[3]=0;    for(LL i=4;i<=1000000;i++)    {        if(i%2==0)        dp[i]=dp[i-1]+((i-2)*(i+4)-2*i)/4-i+3;        else        dp[i]=dp[i-1]+(i-3)*(i+3)/4-i+3;    }    while(~scanf("%d",&n) && n>=3)    {        printf("%lld\n",dp[n]);    }    return 0;}


0 0
原创粉丝点击