博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu-4466-Triangle 数学题
阅读量:7145 次
发布时间:2019-06-29

本文共 1217 字,大约阅读时间需要 4 分钟。

题目链接:

题目意思:

一根长为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
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#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

 

 

转载地址:http://uzwgl.baihongyu.com/

你可能感兴趣的文章
字符串匹配算法
查看>>
Eclipse 问题整理
查看>>
Java常用工具类之RegexpUtils,正则表达式工具类
查看>>
c# 利用反射 从json字符串 动态创建类的实例 并动态为实例成员赋值
查看>>
Kali Linux 优化过程
查看>>
关于图片处理的方法整理
查看>>
手机短信猫
查看>>
JavaScript DOM对象
查看>>
裸机恢复 (BMR) 和系统状态恢复
查看>>
IE自动化 二(判断IP所在地)
查看>>
select下拉框多选 和回显
查看>>
苹果允许Flash程序在iPad和iPhone中使用
查看>>
一起谈.NET技术,XML与DataSet对象的关系
查看>>
艾伟_转载:【译】12个asp.net MVC最佳实践
查看>>
MySQL索引
查看>>
flask/sqlalchemy - OperationalError: (sqlite3.OperationalError) no such table
查看>>
每个势利鬼都有一副奴才相
查看>>
LINQ to Object的一个例子
查看>>
在CI框架中如何实现伪静态
查看>>
ORACLE Postgresql中文排序
查看>>