`
feisuzhu
  • 浏览: 14346 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

【原创】如果Dota里的Kael不仅仅能控制冰火雷,还能控制河蟹、囧、萌……等等n个元素的话,他能有几个技能?

C 
阅读更多

EDIT:其实就是n个球,插n-1个板,板可以相邻…… 以下都是废话了……

 

恩 我承认标题党了

这个问题是昨天晚上找Monster.Q和Jay-ZW吃饭的时候,他们再研究的一个问题。仅仅3个元素的话,数一下就可以了,10个。但是元素一多肯定没法数了,也没法说数一下能控制n个元素的情况。

一开始,我们3个人都往排列组合上想了,各种思路总觉得都不靠谱。

Jay-ZW给出了一个n=3时的解:

3个盒子,3个球。 3种情况:



一个盒子里一个球(1+1+1): C(3,3) = 1 种

一个盒子两个,另外一个盒子一个(2+1): C(3,1) * C(2,1) = 6 种

一个盒子里放3个(3): C(3,1) = 3 种



一共10种



很明显,这种方法在n稍微增大的时候,就会让人吐血了 比如5个的时候就要考虑这几种情况

5

4+1

3+2

3+1+1

2+2+1

2+1+1+1

1+1+1+1+1



这个没法让人接受。



==========糗百风格的昏割线0x01==========



想起来当时用来数n=3情况的时候用的一个小技巧:



Q W E

Q W E

Q W E



这样从上往下画线,但是只能向下和向右拐,比如这样



Q W E

Q W E

Q W E



或者这样



Q W E

Q W E

Q W E



==========糗百风格的昏割线0x02==========



我们定义一个函数f(x, y),f(x, y)的值代表Kael可以控制x种元素,在同时拿出y种元素的情况下,总共的技能数。真实的Kael的话就是f(3,3)=10。



(1) 首先考察一下,x = 1的情况

    呃 很明显,只有一种元素可以控制,那就只能拿出一种技能了。。

    所以f(1, y) = 1

    比如f(1,3) 对应着

    Q

    Q

    Q

    即只有QQQ一种



(2) 再考虑一下, y = 1的情况

    恩 x种元素,拿出一个, 那就是x个技能了

    即f(x, 1) = x

    比如

    Q W E

    对应着Q、W、E三种



(3) 恩 正题了



    观察楼下是个8x8的矩阵,我们要算出来f(8,8)来。



    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I



    总不能不选把,好,我们从先选一个,Q吧!

    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I


    选好了,第二行再选什么? 等等,如果我们观察一下,就会发现,8x8在第一行选Q的情况下,其实与8x7矩阵的所有情况数量相等,因为8x7的每一种情况头上添个Q就是这种情况了。

    同理,如果我第一行选W,情况数与7x7的全部情况数是相等的!


    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I
    Q W E R T Y U I

    所以,当我取完第一行的Q、W、E、R……的时候,把他们都加起来,就是8x8矩阵的所有情况!

    所以f(8,8) = f(8,7)+f(7,7)+ ... + f(1,7)

推广到x和y,得到:

f(x,y) = f(x, y-1) + f(x-1, y-1) + ... + f(1, y-1)



加上(1)、(2)推出的结论,得出:



{

    f(x, y) = Sum(f(i, y-1), i = 1 to x)

    f(x, 1) = x

    f(1, y) = 1


}



==========糗百风格的昏割线0x03==========



写出程序来,也不是特别复杂,附赠C源代码:



#include <stdio.h>

#include <stdlib.h>



int cache[100][100]; // 偷懒,n别过99就不会出错。 其实n到了一定大小就会溢出f(n,n)就会溢出了



int f(int x, int y)

{

    int i, sum;

    if(cache[x][y]) return cache[x][y]; // 计算过则直接返回结果



    if(y == 1) return x;

    if(x == 1) return 1;



    for(i=1, sum=0; i <= x; i++) {

        sum += f(i, y-1);

    }


    return cache[x][y] = sum;

}



int main()

{

    int n;

 

    memset(cache, 0, sizeof(cache));

    scanf("%d", &n);

    printf("%d\n", f(n, n));

    return 0;

}



==========糗百风格的昏割线0x03==========



下面提供n<=10的情况:



f(1,1) = 1

f(2,2) = 3

f(3,3) = 10

f(4,4) = 35

f(5,5) = 126

f(6,6) = 462

f(7,7) = 1716

f(8,8) = 6435

f(9,9) = 24310

f(10,10) = 92378



蛋疼的同学可以拿去验证以下

 

分享到:
评论

相关推荐

    Kael-Qrcode, 二维码生成库,基于canvas,灵活轻巧,美观多变。.zip

    这个库旨在为开发者提供一个简单易用的工具,帮助他们在网页上快速生成自定义风格的二维码。由于它开源,用户可以自由地查看源代码,学习其工作原理,并根据实际需求进行二次开发。 ### 1. 二维码基本原理 二维码...

    WINCE 远程显示控制工具(ce6, ce7)

    WINCE(Windows Embedded CE)是微软开发的一种实时操作系统,常用于嵌入式设备,如工业控制器、手持设备等。在标题中提到的“WINCE远程显示控制工具”是指一种能够帮助用户通过USB接口从个人计算机(PC)远程控制和...

    u9改建(自己加了个卡尔)

    简称WC3或WAR3)这款经典的即时战略游戏中,玩家对U9(一个知名的魔兽争霸III对战平台)地图进行了自定义修改,特别地,添加了一个名为“卡尔”(Kaleth或Kael,通常指《冰封王座》中的英雄血魔法师)的角色或者单位...

    qrcode-logo:二微码加上图片

    取名卡尔,缘由dota英雄Kael;一生二,二生三,三生万物 … 简单地配置Kael-Qrcode,帮助你变换出无穷样式的二维码。 使用 Usage: 1、入手 Demo Base - 基本 var kaelBase = new KaelQrcode(); kaelBase.init...

    IOS测试工程

    同时,对于启动图片,如果可以的话,使用Launch Screen Storyboard代替传统启动图片,这样可以动态地根据设备和系统自动调整,减少了对多张静态图片的依赖。 总之,"IOS测试工程"的焦点在于验证和优化iOS应用的布局...

    kaelzhan.github.io:我自己的网站在 github.io (https

    如果您愿意,可以给它一个Star ,分叉或克隆以使用 ;) 如果有任何问题或要求,只需在这里打开一个问题,我会帮助你。 文档 开始 组件 评论与分析 先进的 定制 标题图片 搜索引擎优化标题 页面构建警告 常问问题 ...

    civ5mod-no-more-turns:一个《文明5》的模组,可帮助玩家在玩了1个小时后得到休息

    这个Mod是做什么的 请参阅 去做 发布之前,请记住禁用调试模式。 播放器应该能够在选项菜单中调整两个选项。 A.(滑条)单个游戏会话允许多少分钟。 (默认为60) B.(滑块)到达A.之后,在公民开始抗议之前还...

    【问题解决】Problem with torchvision下载成功但是import torchvision失败

    现在是2020年5月4日0:51分,2020年五四青年节,我终于解决了这个问题 问题描述: 原创文章 74获赞 31访问量 7781 关注 私信 展开阅读全文 作者:GRIT_Kael

    HotsScraper:风暴英雄网络爬虫

    还需要安装 xcode 命令行工具才能使 phantomjs 工作 所需的包 phantomjs,全局安装(-g)并将PATH设置为其bin文件夹 幻影 汤选择 html解析器 数据库 英雄输出示例 { "_id": "kaelthas/", "name": "Kael'thas", ...

    Android安全-FDE与FBE原理与流程.docx

    - **权限控制**:通过Android的权限管理系统,可以控制哪些应用或用户可以访问特定的加密文件。 这两种加密方式都为Android设备提供了强大的数据保护,但FBE的灵活性使其更适合现代多用户和多应用环境。理解这些...

    IOS UITABLEVIEWCELL不刷新测试代码

    当我们在开发过程中遇到“ IOS UITABLEVIEWCELL不刷新”的问题时,这通常意味着更新数据后,表格视图没有正确地重绘或重新加载单元格来显示新的内容。这种情况可能由多种原因引起,如数据源未正确更新、表格视图的...

    局域网聊天工具源代码

    【局域网聊天工具源代码】是一个专为学生...通过分析和研究这个【局域网聊天工具源代码】,学生不仅可以掌握网络编程的基本技能,还能了解到一个实际应用的完整流程,从网络通信到用户交互,从而提升自己的编程能力。

    Necrosis-classic:坏死插件

    (c) 2005 - 2007 Lomig, Liadora et Nyx (Kael'Thas et Elune - 欧盟/法国) (c) 2008 - 2010 Lomig & ArPharazon(纳格兰 - 美国/大洋洲) (c) 2019 – Doppie 的 2019 经典更新 (c) 2019 – urnati 经典更新...

    [小白系列]sigmoid和tanh激活函数的绘制(分开画,合起来画,总有一款适合你),逐行代码详解

    在神经网络中,激活函数是不可或缺的组成部分,它们赋予了网络模型非线性特性,使得模型能够处理更复杂的任务。本篇文章将详细讲解两种常见的激活函数——Sigmoid和Tanh,并通过Python代码演示如何分别绘制它们的...

    vcldb60.bpl系列大全

    "vcldb60.bpl系列大全"这个标题指的是一个包含多个关键组件的压缩包,主要用于支持某些基于Visual Component Library (VCL)的应用程序运行。VCL是Delphi和C++Builder开发工具中的核心库,用于构建Windows桌面应用...

    Borland C++ 缺少的库大全

    在没有完整安装Borland C++的情况下,如果程序依赖于这些库,就需要手动将它们放到`system32`中,以便系统能够找到并加载它们。 这里涉及到的知识点有: 1. **动态链接库(DLL)**:DLL是一种共享库,它包含可由多...

    SQLITE3加密

    这个版本的SQLite3允许开发人员在存储数据时增加安全性,防止未经授权的访问或数据泄露。 首先,AES是目前最常用的对称加密算法之一,以其高效性和安全性而著称。在SQLite3中,AES被用来对数据库文件进行块级别的...

    常用的正则匹配

    - **说明**: 这个表达式用于匹配由一个或多个数字组成的字符串。 - **应用场景**: 在处理数字输入验证时特别有用,例如身份证号码、电话号码等。 #### 2. 匹配中文字符 - **正则表达式**: `[\u4e00-\u9fa5]` - **...

    北航网络客户端

    校网客户端

    asp.net最快速入门教程综合.zip

    10天学会ASP.NET教程 asp.net完全入门pdf教程 零基础学ASP.NET.2.0(PPT)

Global site tag (gtag.js) - Google Analytics