题目是在做笔试时遇到的,考试时想的过于复杂,浪费的很多时间,然后考砸了。事后又想了想。。题目是大致回忆的,意思是在的。

题目描述

有红白两种花,白花需要连续k倍数放置,k大等于0。求长度区间[a,b]内的放置个数。

输入第一行为数据组数和k值,接下去是每组数据的区间长度

输入:

2 2

3 4

4 4

输出

8

5

说明:

第一组:“红红红”,“红白白”,“白白红”,“红红红红”,“红白白红”,“红红白白”,“白白红红”,“白白白白”

第二组:“红红红红”,“红白白红”,“红红白白”,“白白红红”,“白白白白”

解题思路:递归

fun(cur_pos,white_pos,length_rg)

因为长度是一个区间,函数内需要一个记录成功次数的参数:

success = 0

若 cur_pos 已在length_rg区间内并且截止当前位置已经满足要求:success += 1

递归出口:

cur_pos>=length[rg] return success

考虑当前应该放置的位置cur_pos,和前面最近的白花放置的位置white_pos。

1. (cur_pos - white_pos)%k == 0:

当前白花放置已经满足k倍要求,那么接下来分两种, (可以合并的,先不管):

a. 放置红花

success += fun(cur_pos+1, cur_pos+1,length) #白花位置更改

b. 放置白花

success +=  fun(cur_pos+1, white_pos,length) #这里white_pos也可以写成 cur_pos+1 ,是一个意思,方便理解先这样吧

2. (cur_pos - white_pos)%k > 0:

当前白花的放置不满足要求,当前位置只能放置白花:

success += fun(cur_pos+1, white_pos, length)

具体函数代码:

def fun(cur_pos, length_rg, white_begin, k):sucess = 0print(cur_pos,white_begin)if cur_pos >= length_rg[0]:if (cur_pos-white_begin)%k ==0:sucess += 1if cur_pos >= length_rg[1]:return sucessif (cur_pos-white_begin)%k == 0:#红sucess += fun(cur_pos+1,length_rg,white_begin+1)#白sucess += fun(cur_pos+1,length_rg,white_begin)return sucess

考试时的想法:排列组合

给定长度L,倍数K

假设k个白花为一组,那么白花出现的组数g: 0<=g<=int(L/k),红花出现的个数为:H = L-k*g

然后问题转化为在H个红花之间放置g组白花的方法数,即在H+1个位置中找出位置数。

然后主要考虑方法重复的问题:(然后把自己玩死了。。)

对于g组白花,可以选出1到g的位置进行放置,即将g组白花再进行分组

(1)选出1个位置放置g组白花:

(2) 选出2个位置。。

需要考虑将g组分成两组,分成数量不同的两组还是数量相同的两组。。

对于数量不同的,要使用

对于数量相同的,要使用

(3)选出3个位置。。。。

感觉这也是个方法。但是我没想通。递归的方法可能也不怎么秀但有解。考试的时候就认准了排列组合然后成了炮灰。

算法练习, 红白花放置方法数相关推荐

  1. 【算法-Java实现】 换钱的方法数(暴力递归法)

    [算法-Java实现] 换钱的方法数(暴力递归法) 文章目录 [算法-Java实现] 换钱的方法数(暴力递归法) 一.问题描述: 二.问题解答: **举例:** **思路:==暴力递归==** 三.算 ...

  2. 算法53----换钱的最小次数和方法数【动态规划】

    一.题目:换钱的最小次数 给定数组arr,arr中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数. 举个 ...

  3. 算法进阶面试题07——求子数组的最大异或和(前缀树)、换钱的方法数(递归改dp最全套路解说)、纸牌博弈、机器人行走问题

    第一题 给定一个数组,求子数组的最大异或和. 一个数组的异或和为,数组中所有的数异或起来的结果. 简单的前缀树应用 暴力方法: 先计算必须以i结尾的子数组的异或和,然后再计算机i+1的,以此类推... ...

  4. 算法:使用单词表拼接字符串的方法数

    题目描述 假设所有字符都是小写字母. 长字符串是str arr是去重的单词表, 每个单词都不是空字符串且可以使用任意次 使用arr中的单词有多少种拼接str的方式,返回方法数. 题目解析 从左到右尝试 ...

  5. 算法3-加减号得数方法数

    题目 给定一个数组arr,你可以在每个数字之前决定+或者但是必须所有数字都参与 再给定一个数target,请问最后算出target的方法数是多少? 每一个数都参与运算,运算符号只有±,最终能得出tar ...

  6. 试题 算法训练 车的放置(蓝桥杯c++)

    问题描述 在一个n*n的棋盘中,每个格子中至多放置一个车,且要保证任何两个车都不能相互攻击,有多少中放法(车与车之间是没有差别的) 输入格式 包含一个正整数n 输出格式 一个整数,表示放置车的方法数 ...

  7. 【工具】统计jar包和apk中的java方法数

    2019独角兽企业重金招聘Python工程师标准>>> [工具]统计jar包和apk中的java方法数 :http://www.baidufe.com/item/5891ec6f73 ...

  8. Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚

    时之沙: http://blog.csdn.net/t12x3456 随着应用不断迭代,业务线的扩展,应用越来越大(比如集成了各种第三方sdk或者公共支持的jar包,项目耦合性高,重复作用的类越来越多 ...

  9. 【Android 安全】DEX 加密 ( 多 DEX 加载 | 65535 方法数限制和 MultiDex 配置 | PathClassLoader 类加载源码分析 | DexPathList )

    文章目录 一.65535 方法数限制和 MultiDex 配置 二.多 DEX 加载引入 三.PathClassLoader 类加载源码分析 四.BaseDexClassLoader 类加载源码分析 ...

  10. 机器人达到指定位置方法数

    题目:假设有排成一行的N个位置,标记为1-N,N一定大于或等于2.开始时机器人在其中的M位置上(M一定是1-N中的一个),机器人可以往左走或者往右走,如果机器人来到1位置,那么下一步只能往右来到2位置 ...

最新文章

  1. 刚开始Windows Mobile的开发,请大家多多关照
  2. 【紧急】支付宝全面停止微信合作
  3. Python 技术篇-win32、amd64结尾的whl库该选哪个,如何查看python平台支持
  4. tensowflow 训练 远程提交_一文说清楚Tensorflow分布式训练必备知识
  5. 【JAVA设计模式】外观模式(Facade Pattern)
  6. [html] 后缀.html和.htm有什么区别?
  7. 深度优化LNMP之Nginx [2]
  8. Oracle 自动生成的视图VM_NSO_1
  9. Steam注册遇到CAPTCHA问题,一直注册不了,一个简单的注册办法
  10. Python 递归函数计算阶乘
  11. 劣币驱逐良币,人吃人的中国职场环境还能走多远
  12. 感受野-Receptive Field的理解
  13. 一文详解知识图谱关键技术与应用 | 公开课笔记
  14. java计算机毕业设计夕阳红养老院系统源代码+数据库+系统+lw文档
  15. java虚拟机学习笔记——连接模型(第八章)
  16. 【C++ 程序】 Fractal Designer 0.2
  17. TOMCAT/JS/CSS/JavaWeb/浏览器老是加载缓存/谷歌浏览器/微软浏览器/刷新键都按烂了/无法加载样式解决办法之一
  18. 恶意劫持主页之强力修复法
  19. 【高通qdcm使用总结】
  20. web项目设置最小宽度

热门文章

  1. 读取dds文件转为opengl纹理
  2. 解决Proteus仿真时候提示Could not load simulator DLL错误
  3. 2021-12-28学习的道路是寂寞的,学成后的成绩是惊艳的。喜欢热闹是生物的本性,耐得住寂寞方显人性尊贵
  4. linux usr目录权限不够,linux-mkdir:无法创建目录“ /usr/local/n / versions”:权限被拒绝...
  5. 他一生仅凭252个字,就傲视千古…
  6. flash 不显示 旋转 补间动画_【图片】Flash入门5:详解制作补间动画(非传统补间)【flash软件吧】_百度贴吧...
  7. 对Python【返回函数与闭包】的一点思考
  8. c语言链表中next作用,C语言链表中q-next=p;表示什么意思?
  9. jQuery学习笔记之closest()
  10. 51单片机LCD1602液晶屏显示