zoukankan      html  css  js  c++  java
  • 鸣人的影分身(动规)

    鸣人的影分身

    总时间限制: 
    1000ms
    内存限制: 
    65536kB
    描述

    在火影忍者的世界里,令敌人捉摸不透是非常关键的。我们的主角漩涡鸣人所拥有的一个招数——多重影分身之术——就是一个很好的例子。

    影分身是由鸣人身体的查克拉能量制造的,使用的查克拉越多,制造出的影分身越强。

    针对不同的作战情况,鸣人可以选择制造出各种强度的影分身,有的用来佯攻,有的用来发起致命一击。

    那么问题来了,假设鸣人的查克拉能量为M,他影分身的个数为N,那么制造影分身时有多少种(用K表示)不同的分配方法?(影分身可以被分配到0点查克拉能量)

    输入
    第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
    输出
    对输入的每组数据M和N,用一行输出相应的K。
    样例输入
    1
    7 3
    样例输出
    8
    【思路】相当于把m个相同的苹果放入n个盘子中的方法的个数
    就将就着这个问题写思路吧 m个克拉能量相当于m个苹果,n个分身相当于n个盘子;
    对放入的情况进行讨论
    (1)当n>m(即当盘子个数大于苹果个数时)
    一定有m-n个盘子空着 那么这种情况和把m个苹果放入m个盘子效果是一样的;
    (2)当n<=m时(即当盘子个数小于苹果数)
    分类讨论:
    1、至少有一个盘子是空的的时候 就相当于把m个苹果放入n-1盘子中
    2、当每个盘子都有的时候(每个盘子都有苹果了那么至少是一个吧)
    效果就是 f(m-n,n),把每个盘子的苹果都拿出一个;、
    因为递归(1)是盘子数不断减少,所以当n==1时,return 1(只有一个盘子那就只有一种方法)
    (2)是苹果数不断减少,所以我们定义m==0时 return 1(有一种方法);

    【代码】
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<iomanip>
    using namespace std;
    int dp(int m,int n)
    {
        if(m==0||n==1)return 1;
        if(m<n)return dp(m,m);
        else
        return dp(m,n-1)+dp(m-n,n);
    }
    int main()
    {
        int t,m,n;
        scanf("%d",&t);
        for(int i=1;i<=t;i++)
        {
            scanf("%d%d",&m,&n);
            cout<<dp(m,n)<<endl;
        }
        return 0;
    }
  • 相关阅读:
    使用 Spring data redis 结合 Spring cache 缓存数据配置
    Spring Web Flow 笔记
    Linux 定时实行一次任务命令
    css js 优化工具
    arch Failed to load module "intel"
    go 冒泡排序
    go (break goto continue)
    VirtualBox,Kernel driver not installed (rc=-1908)
    go运算符
    go iota
  • 原文地址:https://www.cnblogs.com/zzyh/p/6685427.html
Copyright © 2011-2022 走看看