前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快手[编程题]魔法深渊

快手[编程题]魔法深渊

作者头像
week
发布2018-12-11 17:02:00
4840
发布2018-12-11 17:02:00
举报
文章被收录于专栏:用户画像用户画像

版权声明:本文为博主-姜兴琪原创文章,未经博主允许不得转载。

前几个月放映的头号玩家简直火得不能再火了,作为一个探索终极AI的研究人员,月神自然去看了此神剧。

由于太过兴奋,晚上月神做了一个奇怪的梦,月神梦见自己掉入了一个被施放了魔法的深渊,月神想要爬上此深渊。

已知深渊有N层台阶构成(1 <= N <= 1000),并且每次月神仅可往上爬2的整数次幂个台阶(1、2、4、....),请你编程告诉月神,月神有多少种方法爬出深渊

输入描述:

代码语言:javascript
复制
输入共有M行,(1<=M<=1000)

第一行输入一个数M表示有多少组测试数据,

接着有M行,每一行都输入一个N表示深渊的台阶数

输出描述:

代码语言:javascript
复制
输出可能的爬出深渊的方式

示例1

输入

代码语言:javascript
复制
4
1
2
3
4

输出

代码语言:javascript
复制
1
2
3
6

解题思路:

第6个台阶可以从2,4,5一次性到达,把dp[2],dp[3],dp[4],dp[5]求和即可

第1000个台阶可以从488(1000-512),744(1000-256)...999一次性到达,把dp[488]+...+dp[999]求和即可

备注:

代码语言:javascript
复制
为了防止溢出,可将输出对10^9 + 3取模
代码语言:javascript
复制
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] sc = new int[n];
        for(int i=0;i<n;i++){
            sc[i]=in.nextInt();
        }
        int[] dp=new int[1001];
        for(int i=1;i<1001;i++){
            dp[i]=0;
        }
        dp[0]=1;
        int[] byteArray={1, 2, 4, 8, 16, 32, 64, 128, 256, 512};
        for(int i=0;i<1000;i++){
            for(int j=0;j<10 && i>= byteArray[j];j++){
                dp[i]+=dp[i-byteArray[j]];
                dp[i]%=(1000000000 + 3);
            }
        }
        for(int i=0;i<n;i++){
            System.out.println(dp[sc[i]]);
        }
        in.close();
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年11月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 输入
  • 输出
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档