HDU 4466 Triangle 第二次积分赛C题(思维+简单dp+细心)

         题目大意:

         给一根长度为n的铁丝,将它分为若干份,不过需要每一份都相似。

     解题思路:

         先求出周长为n的三角形可以分成多少互质的三角形,然后再用对小三角形插隔板法。

     题目地址: Triangle

/*
      长度为n的铁丝折断成若干相似的三角形。
      先计算长度为x的铁丝能组成的相似三角形,再dp。
*/
#include
#include
#include
#include
using namespace std;
const int MO = (int)1e9+7;
const int N=5000005;

int f[N],fac[N];
//f(x)表示周长为x的不同三角形(a,b,c)的数量. 令a <= b <= c 

void cal()
{
    f[3]=1;
    for(int i=4;i=MO) f[i]-=MO;
        if(f[i]<0) f[i]+=MO;
    }
    fac[1]=1;fac[2]=2;
    for(int i=3;i=MO) fac[i]-=MO;
        for(int j=2;i*j


你可能感兴趣的:(思维,动态规划)