一道搜索好题

给定一个数S,找任意个正整数a1,a2,…,an,使得它们的和恰好等于S,且它们的倒数之和与1的差不超过10^-6。

输出任意一种方案或者输出无解。

S<=10^7

自由搜索

自己加限制:搜索递增

强效剪枝:

if(sum+1.0/S>eps+1) return;八位数秒处
#include<cmath>
#include<cstdio>
using namespace std;
const double eps=1e-6;
int ans[1001];
bool ok;
void dfs(int S,double sum,int last,int now)
{
    if(ok) return;
    if(!S)
    {
        if(abs(1-sum)<eps)
         {
             for(int i=1;i<now;i++) printf("%d ",ans[i]);
             ok=true;
         }
        return;
    }
    if(sum+1.0/S>eps+1) return;
    for(int i=last+1;i<=S;i++)
     {
         ans[now]=i;
         dfs(S-i,sum+1.0/i,i,now+1);
         if(ok) return;
     }
}
int main()
{
    int S;
    scanf("%d",&S);
    dfs(S,0,1,1);
} 
时间: 2024-10-11 15:47:20

一道搜索好题的相关文章

POJ 1979 Red and Black 深度优先搜索上手题

Red and Black Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21738   Accepted: 11656 Description There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a

利用简易爬虫完成一道基础CTF题

利用简易爬虫完成一道基础CTF题 声明:本文主要写给新手,侧重于表现使用爬虫爬取页面并提交数据的大致过程,所以没有对一些东西解释的很详细,比如表单,post,get方法,感兴趣的可以私信或评论给我.如果文中有哪些问题,也欢迎大家指正. Written by Menglin Ma 写在前面 ??如果有想学习基础爬虫的同学,建议在中国大学MOOC上搜索嵩天老师的爬虫课程,讲的真的很细致,也很基础. ??想入门CTF的同学,给你们推荐个基础的网站,上面的好多题对新手比较友好:www.shiyanbar

Nim Game,一个有趣的游戏,也是一道入门算法题。

Nim Game,其实很多人都玩过.其实就是我们玩的划线游戏. 一张纸上,画若干条线,双方一人划一次,每次划掉1~3条线.可以选择画1条,也可以划2条,也可以3条.具体划去几条线完全看自己的策略.谁划掉最后一条线,就是赢家. 如上图,蓝方获胜. 正在看这篇文章的你一定是一个聪明人,每一步都是最优解,而你的对手,也跟你一样聪明,每步都是最优的解法. 现在你作为先手,在线条总数为多少的时候,你必赢呢,又在多少的时候必输呢? 可不可以用一个函数来判断在线条总是为x时你的输赢情况呢?这样你以后跟别人玩这

分享一道数列证明题

两个整数数列a1,a2,…和b1,b2,….满足方程(an-an-1)(an-an-2)+(bn-bn-1)(bn-bn-2)=0,其中n=3,4,….证明存在正整数k使得ak=ak+2014. [解]设在平面直角坐标系下Pn(an,bn) 将(an-an-1)(an-an-2)+(bn-bn-1)(bn-bn-2)=0 写成 故点Pn在以Pn-1Pn-2为直径的圆上. 记dn=|PnPn+1|2=(an-an+1)2+(bn-bn+1)2. 则显然{dn}是整数列,且由点Pn在以Pn-1Pn-

一道PK赛题

Problem Description I think that you might have played the traditional Chinese ring game: The Chinese Linking Rings (here we call its nickname Jiulianhuan —— “九连环”). Well, you say you haven’t played it before? Then you must have seen it before, right

华为题 搜索水题 DFS

1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <string> 6 #include <iterator> 7 #include <algorithm> 8 #include <cstdlib> 9 #include <deque> 10 #include &l

l洛谷 P3926 SAC E#1 - 一道不可做题 Jelly

P3926 SAC E#1 - 一道不可做题 Jelly 题目背景 SOL君(炉石主播)和SOL菌(完美信息教室讲师)是好朋友. 题目描述 SOL君很喜欢吃蒟蒻果冻.而SOL菌也很喜欢蒟蒻果冻. 有一天,他们在一起搓炉石,而SOL菌则要拿出蒟蒻果冻招待他的客人. 蒟蒻果冻一般在a度下保存在冰箱里.但是刚拿出来的时候太冰了,需要加热.SOL菌打算用一种神奇的电炉加热蒟蒻果冻.根据观察,它有一个特点: 1.蒟蒻果冻小于c度的时候,每p单位时间加热1单位温度: 2.当蒟蒻果冻等于c度的时候,需要q单位

跟涛哥一起学嵌入式 第05集:一道程序改错题,测出你的嵌入式功底

大家好,欢迎阅读<跟涛哥一起学嵌入式>第05集,我们今天讨论一下中断的基本概念. 中断,是嵌入式开发中经常使用的一个功能,也是嵌入式工程师必须要掌握的一个概念:CPU和外设通信时,一般都采用中断的形式异步通信,可以大大提高CPU资源的利用率.而你对中断的理解,到底有多少呢?不要急,一道程序改错题,就可以测出你的嵌入式系统功底. 比如,我们在嵌入式ARM裸机平台上,要实现一个MP3播放器,要求实现如下功能:当按键按下时,可以播放.暂停.播放下一首.上一首.为此,我们设计一个按键中断服务程序,当有

一道模拟赛题

一道模拟赛题 简要题意: 树,单点修改,求直径,求必须选\(x\)的最长链,卡空间. 分析: 我们先把必须选的那个丢掉,发现他实际上是单点修改\(inf\)然后查树的直径. 如果不卡空间的话我们可以用点分树来搞一搞,不过由于一次修改会影响到很多点不能用堆来维护只能用支持区间修改的线段树,这样空间就开不下了. 我们还有动态\(DP\). 对一条重链维护\(lx\)表示必须选上端点向下延伸的最长链,\(rx\)表示必须选下端点向上延伸的最长链,\(s\)表示点权和,\(mx\)表示这些点及他们轻儿子