题意描述

近来 IOI 专家们正在进行一项有关整数方程的研究,研究涉及到整数方程解集的统计问题,问题是这样的。

对任意的正整数 \(n\),我们有整数方程:

\[\frac{1}{x_1}+\frac{1}{x_2}+...+\frac{1}{x_n}=1
\]

该整数方程的一个解集 \([x_1,x_2,...,x_n]\) 是使整数方程成立的一组正整数,例如 \([n,n,...,n]\)就是一个解集。

在统计解集时,IOI 专家把数据值相同但顺序不一样的解集认为是同一个解集。

例如:当 \(n=3\) 时,我们把 \([2,3,6]\) 和 \([3,6,2]\) 认为是同一个解集。

现在的任务是:对于一个给定的 \(m\),在最多只允许 \(1\) 个 \(x_i\) 大于 \(m\) 时,求出整数方程不同解集的个数。

其中数据保证 \(n\leq 20,m\leq 100\)。

就是弱化版的埃及分数

算法分析

直接搜索就是了,没什么太大的技巧。

两个上下界剪枝:(假设当前进行到第 \(depth\) 个)

  1. 如果后 \(n-depth+1\) 个分母都取最小值(上一个的分母)还 \(<1\),剪枝。
  2. 如果后 \(n-depth\) 个分母都取最大值(m),最后一个无穷小还 \(>1\) 剪枝。

注意精度问题约分即可。

代码实现

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef double db;
const db eps=1e-15; int n,m,ans=0; int Gcd(int x,int y){
while(y^=x^=y^=x%=y);
return x;
} void dfs(int dep,int last,int t1,int t2){
//dep 当前阶段,last 上一个分母,t1 当前的和的分子,t2 当前的和的分母。
int G=Gcd(t1,t2);
t1/=G,t2/=G;//约分不能少
if(dep==n){
if(t2-t1==1 && t2>=last) ++ans;//最后一个可以直接计算。
return;
}
db t=1-(db)t1/t2;
if(((db)(n-dep+1)/last)<t-eps) return;//剪枝 1。
if(((db)(n-dep)/m)>t+eps) return;// 剪枝 2。
for(int i=last;i<=m;i++)
dfs(dep+1,i,t1*i+t2,t2*i);
return;
} int main(){
scanf("%d %d",&n,&m);
for(int i=2;i<=m;i++) dfs(2,i,1,i);
printf("%d\n",ans);
return 0;
}

完结撒❀。

最新文章

  1. jQuery简单的手风琴菜单
  2. sync_object not in (&#39;TBL_Territory&#39;)
  3. iStylePDF安全电子文档解决方案之电子合同在线订立
  4. HDU 1495 非常可乐
  5. css把超出的部分显示为省略号的方法兼容火狐
  6. vs2012 快捷键修改
  7. java 两个日期之间的标准工作日(原创)
  8. javascriptDOM编程艺术_学习笔记_知识点 DOM
  9. pytest框架之fixture详细使用
  10. 深入浅出TCP/IP协议
  11. P3727 曼哈顿计划E
  12. js--延时消失的菜单--(笔记)
  13. 26、xcode8.0 解决没有iPhone4模拟器问题
  14. vi 中大小写转换功能
  15. TreeSet的自然排序(自定义对象 compareTo方法)
  16. Java基础——常用类之日期时间类
  17. 话说文件系统——VFS简介(二)
  18. Thunder——互评beta版本
  19. low逼三人组、nb二人组、归并、希尔排序----小结
  20. python ssh登录

热门文章

  1. Jmeter之『多变量循环』
  2. 通过VNC远程连接Linux实例
  3. DX12龙书 02 - DirectXMath 库中与向量有关的类和函数
  4. 1.ffmpeg、ffplay、ffprobe命令使用
  5. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)解决方案
  6. Makefile常用函数(转)
  7. 多测师讲解接口测试 _理论基础知识001_高级讲师肖sir
  8. Elasticsearch修改字段类型 (_reindex)
  9. 视频和音频的 DOM
  10. 你真的了解Python吗?这篇文章可以让你了解90%