题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4466

题目意思:

一根长为N的木棒,长度分成若干个三角形,使得任意两个三角形都相似。对应顺序三角形全部全等的为同一种分法,求总共有多少种分法。

解题思路:

数学题。

先考虑分成一个三角形的情况。

不妨设a<=b<=c;

1、当b=c时,a至少为1,所以c<=(n-1)/2

而a<=b 所以n-2*c<=c =>c>=n/3; 故共有(n-1)/2-(n/3)+(n/3?0:1)种。

2、当b<c时,肯定有b<=c-1

此时若a+b>c 则a+b>c-1

如果a,b,c能构成三角形,则a,b,c-1也一定能够构成三角形。

反过来,如果a,b,c-1能够构成三角形,也即a+b>c-1 当a+b!=c时,一定能使a,b,c构成三角形。故可以通过dp[n-1]递推过来,然后减去a+b=c+1的情况。

此时n=2*c+1,c=(n-1)/2  只有当n为奇数的时候才有可能,而a+b=(n-(n-1)/2),a<=b 所以这种情况共有 (n-(n-1)/2)/2种,化简得(n+1)/4

在考虑有多个三角形的情况。

假设N=a*b 则把b作为一个基本三角形,a个1,作为a个部分,中间有a-1个隔板,每个隔板可选可不选,一共有2^(a-1)种情况。

当所有的隔板都不选的话,就是一个大三角形,所以此时要把,刚才求得的一个三角形中三边不互质的数量减掉。而每个约数,对应的该约数能拆分成一个互质三角形的种数的不互质的三角形,乘以倍数就是大的不互质的三角形。

详见代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#define eps 1e-6
#define INF 0x1f1f1f1f
#define PI acos(-1.0)
#define ll __int64
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
#define M 1000000007
#define N (5000000+10)/*
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
*/
int dp[N],bin[N]; //dp[i]表示一个三角形的情况,并且是互质的情况void init()
{dp[3]=1;for(int i=4;i<N;i++){dp[i]=dp[i-1]+(i-1)/2-i/3+(i%3?0:1); //b==c的情况if(!(i&1)) //当前一个为奇数dp[i]-=i/4; //减去,递推中不满足要求的部分dp[i]=dp[i]%M;if(dp[i]<0)dp[i]+=M;}bin[1]=1;for(int i=2;i<N;i++){bin[i]=(bin[i-1]<<1)%M;for(int j=2;i*j<N;j++){dp[i*j]-=dp[i]; //减去一个三角形中三边不互质的部分,,if(dp[i*j]<0)   //也就是对应的约数的dp[i],对于每个互质的小的a,b,c 对应一个j*a,j*b,j*cdp[i*j]+=M;}}return ;
}int main()
{int n,ca=0;init();//printf("%I64d\n",dp[3]);while(scanf("%d",&n)!=EOF){int ans=0;for(int i=1;i*i<=n;i++){if(n%i)continue;ans=(ans+1LL*dp[i]*bin[n/i])%M; //中间乘法可能会溢intif(i*i!=n)ans=(ans+1LL*dp[n/i]*bin[i])%M;}printf("Case %d: %I64d\n",++ca,ans);}return 0;
}

hdu-4466-Triangle 数学题相关推荐

  1. HDU 4466 Triangle(计数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4466 题意:给出一根长度为n的铁丝.将其分成若干段并将每段折成一个三角形,使得三角形都相似.有多少种分 ...

  2. HDU 4466 Triangle(12年成都)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题目:给出长度为n的铁丝,将铁丝分为若干 部分,每 ...

  3. HDU - 4466 Triangle

    题目:给你一根长度为n的铁丝,将铁丝分成几部分,再把每部分都折成三角形,并且每个三角形都相似,而且三角形的边长是整数.问有多少种分法. 三角形三遍相等视为相等,三角形顺序不同视为不同 思路:设三角形3 ...

  4. HDU 4466 Triangle

    传送门 我们枚举x=a+b+cx=a+b+c,枚举aa,a<=b<=ca 把c=x−a−bc=x-a-b代入下面的不等式中,可以得到bb的范围 a+b>ca+b>c a+c&g ...

  5. hdu 4466 Triangle dp+数学

    分析 我们总共有n长的绳子,要求给绳子分段,每段都可以组成三角形,且所有三角形相似,三角形有顺序,问方案数 我们可以考虑一个F(x)F(x)F(x)为周长为x的三角形的个数 考虑三边a<=b&l ...

  6. hdu 4466 Triangle (数学)

    终于做完了这道题,发一下自己的理解,踩踩~~ 题意:给你一个长度n的铁丝,将它弯成一个三角形,或者分成m段,每段组成一个三角形,要求这些三角形相似,问有多少种不同的方案数? 题解: 设f[x] 表示 ...

  7. HDU 5914 - Triangle

    题目 HDU 5914 Triangle Problem Description Mr. Frog has n sticks, whose lengths are 1,2, 3⋯n respectiv ...

  8. hdu 4324 Triangle LOVE

    http://acm.hdu.edu.cn/showproblem.php?pid=4324 比赛的时候 脑子又短路了 "between A and B, if A don't love B ...

  9. HDU 5914 Triangle 数学找规律

    Triangle 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5914 Description Mr. Frog has n sticks, who ...

  10. HDOJ 4466 Triangle 递推

    1.当b=c时,a至少为1,所以c<=(n-1)/2 而a<=b 所以n-2*c<=c =>c>=n/3; 故共有(n-1)/2-(n/3)+(n/3?0:1)种. 2. ...

最新文章

  1. 为git服务器配置gitosis管理权限
  2. 策略模式(封装一系列的功能,使之可以相互替换)
  3. 什么是动态语言(转)
  4. [PM Tools]软件项目进度跟踪表v4.0
  5. Java可能使用UTF-8作为其默认字符集
  6. 分解 python_面试官:如何用Python实现将一个整数分解成质因数?
  7. 成功人士都是这样逼出来的
  8. 字节跳动和腾讯不正当竞争案将于深圳开庭 抖音:我们也是看新闻才知道本月24日要开庭...
  9. 检查PHP扩展是否安装成功
  10. 旧金山散记(一):第一次在美国打车
  11. chrome extensions快捷键shortcuts配置
  12. 实战|淘宝用户行为分析案例
  13. 七月流火,让我们共享一场开源数据库的饕餮盛宴
  14. ftp客户端中文乱码问题解决
  15. 黑客帝国神级影评,转至豆瓣。 — — 哲思。
  16. win10自带图片出现文件系统错误 (-2147219196)的修复方法
  17. steam++工具箱
  18. Verilog状态机详述
  19. 2019 年最佳 Linux 笔记本电脑发行版 top10
  20. AI 黑科技,老照片修复,模糊变高清

热门文章

  1. JLink_Windows_V612e安装 02
  2. 活动报名小程序版v4.9.40
  3. vue 启动没有不支持ip,只能localhost
  4. IPFS生态日趋成熟,Filenet携手Filecoin共同打造共享存储新格局
  5. 网易游戏-测试开发工程师-18年暑期实习-一面二面
  6. ZYNQ-IO模拟HDMI输出图像
  7. 数据结构和算法学习(3)- 递归、回溯
  8. 修改SpringBoot内置Tomcat的端口
  9. python能实现文字转语音么
  10. HTML-input文本框(添加提示文字,填写内容时消失)