zoukankan      html  css  js  c++  java
  • 洛谷P1755 斐波那契的拆分

    题目背景

    题目描述

    已知任意一个正整数都可以拆分为若干个斐波纳契数,现在,让你求出n的拆分方法

    输入输出格式

    输入格式:

    一个数t,表示有t组数据

    接下来t行,每行一个数n(如题)

    输出格式:

    t行,每行一个字符串,表示拆分方法(格式:n=a1+a2+a3+..+an),要求从小到大输出

    输入输出样例

    输入样例#1:
    input1:1
           1
    input2:1 10
    输出样例#1:
    output1:1=1
    output2:10=2+8

    说明

    若有多组数据,以个数最小的为准,若仍有多组,输出右边尽量大的一组

    对于100%的数据 t<=1000 1<=n<=10^9

    小小DFS

     1 /*By SilverN*/
     2 #include<iostream>
     3 #include<cstdio>
     4 #include<cmath>
     5 #include<cstring>
     6 #include<algorithm>
     7 #define LL long long
     8 using namespace std;
     9 int read(){
    10     int x=0,f=1;char ch=getchar();
    11     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    12     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
    13     return x*f;
    14 }
    15 int T;
    16 int n;
    17 int a[50];
    18 bool DFS(int pos,int res,bool flag){
    19     if(res==n){return 1;}
    20     if(!pos)return 0;
    21     for(int i=pos;i;i--){
    22         if(res+a[i]>n)continue;
    23         if(DFS(i-1,res+a[i],0)){
    24             if(flag)printf("%d
    ",a[i]);
    25             else printf("%d+",a[i]);
    26             return 1;
    27         }
    28     }
    29     return 0;
    30 }
    31 int main(){
    32     int i,j;
    33     scanf("%d",&T);
    34     a[1]=1;a[2]=1;
    35     for(i=3;i<46;i++){
    36         a[i]=a[i-1]+a[i-2];
    37 //        printf("%d
    ",a[i]);
    38     }
    39     while(T--){
    40         scanf("%d",&n);
    41         printf("%d=",n);
    42         DFS(45,0,1);
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    java基础篇2之枚举
    java基础篇1之可变参数,增强for循环,自动装箱
    计算机常用英语
    ThreadLocal
    Tomcat 配置连接池
    数据库连接池
    装饰者模式
    JavaWeb 之事务
    MySql 批处理
    如何将大数据保存到 MySql 数据库
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/6035353.html
Copyright © 2011-2022 走看看