算法题20 在1到n中选取若干个数,要求如果选了x就不能选2x和3x,问共有多少种选择方案?
2011-05-17 22:57
309 查看
例如,n=3时答案为5,这5种选法分别为{}, {1}, {2}, {3}, {2,3}。
解析:
把数字1放在方阵最左下角,然后不断在一个数的右边填上它的两倍,在其上方填上它的三倍。问题就等价地转化为,在方阵中选取若干个格子使得任意两个不相邻,求有多少种选取方案。这是一个经典的带状态压缩的动态规划问题。另外,遇到尚未出现过的数(即除2和3以外的素数)就再开一张新的表,然后用乘法原理把它们各自对应的方案数乘起来就是了。
例如当n=20时,最终答案就等于下面这7张表各自所对应的选取方案数的乘积。
这题也许还有组合数学方法,但下面这个加强版估计就只能这样做了:如果再给定一些不能选的数,则又有多少种选择方案?
解析:
把数字1放在方阵最左下角,然后不断在一个数的右边填上它的两倍,在其上方填上它的三倍。问题就等价地转化为,在方阵中选取若干个格子使得任意两个不相邻,求有多少种选取方案。这是一个经典的带状态压缩的动态规划问题。另外,遇到尚未出现过的数(即除2和3以外的素数)就再开一张新的表,然后用乘法原理把它们各自对应的方案数乘起来就是了。
例如当n=20时,最终答案就等于下面这7张表各自所对应的选取方案数的乘积。
这题也许还有组合数学方法,但下面这个加强版估计就只能这样做了:如果再给定一些不能选的数,则又有多少种选择方案?
相关文章推荐
- 算法--实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。(详细讲解)
- 利用分治思想,写一个求解从n个元素里选取m个有多少种组合方案的(非递归)高性能算法
- 算法兴趣----- 一亿数据获取前100个最大值(仅供参考,基于快速排序的实现时间不稳定,基于最小堆实现。如果我们只要求前K个最大(小)值的时候,用堆是最好的选择,因为这里不用每次都排序了)
- 现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。
- 设计一个算法,要求在20个数字中(0到19)随机选取十个数字,但是这十个数字不能重复(用C语言或者OC实现)
- 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate
- 给你一个链表和一个 random函数, 设计一个算法能随机返回链表的某个节点, 要求每个节点被返回的概率一样。限制条件是只能遍历链表一次并且不能用额外空间。
- 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。 //求总共有多少总跳法,并分析算法的时间复杂度
- 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。
- 操作系统选择调度方式和算法的若干准则
- 你好,C++(20).4.2.2 表达并列条件选择的switch语句:如果……如果……如果……
- 订饭系统方案之‘选择谁在某天订饭’的算法
- 母牛生产问题;第一年有一头小母牛,3年之后每年都生一头小母牛,假设都不死,第n年共有多少母牛,输出n从1到20的母牛数目
- 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate 的解决办法
- 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate
- 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字(for、while、if、else、switch、case)。
- 合并有序链表,实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。
- 【每天算法2】:用java语言实现,一个组数:122345这6个数,打印出它所有可能的组合;要求4不能在第3位,3和5不能相连。
- 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate