算法题20 在1到n中选取若干个数,要求如果选了x就不能选2x和3x,问共有多少种选择方案?
来源:互联网 发布:java log4j2 maven 编辑:程序博客网 时间:2024/06/05 17:39
例如,n=3时答案为5,这5种选法分别为{}, {1}, {2}, {3}, {2,3}。
解析:
把数字1放在方阵最左下角,然后不断在一个数的右边填上它的两倍,在其上方填上它的三倍。问题就等价地转化为,在方阵中选取若干个格子使得任意两个不相邻,求有多少种选取方案。这是一个经典的带状态压缩的动态规划问题。另外,遇到尚未出现过的数(即除2和3以外的素数)就再开一张新的表,然后用乘法原理把它们各自对应的方案数乘起来就是了。
例如当n=20时,最终答案就等于下面这7张表各自所对应的选取方案数的乘积。
这题也许还有组合数学方法,但下面这个加强版估计就只能这样做了:如果再给定一些不能选的数,则又有多少种选择方案?
- 算法题20 在1到n中选取若干个数,要求如果选了x就不能选2x和3x,问共有多少种选择方案?
- 【二进制枚举】求在n个数中取任意个数加起来组成x的方案数
- 1^x + 2 ^ x + 3 ^x + …… + n^x
- 算法在一个数组中平均取x个数
- 整数 向上取整算法:(x+n-1)/n
- 第三十三章续:用1 x 2的多米诺骨牌填满M x N的矩形有多少种方案
- 回溯法的一个典型应用,在1~x中选出n个数的排列方式,且相邻两个数不一样·
- 算法题-列出x-n之间素数并统计个数
- 在升序数组中选取2个数,使其和等于一个输入数字n
- x^1 + x ^2 +...+x ^n = m 求x
- 【HDU4542】【反素数+DFS+暴力打表】【给出一个数K,和两个操作,如果操作是0,就求出一个最小的正整数X,满足X的约数个数为K,如果操作是1,就求出一个最小的X,满足X的约数个数为X-K】
- 利用泰勒级数sin(x)=x-x^3/3!+x^5/5!-x^7/7!+x^9/9!-... 计算sin(x)的值。要求最后一项的绝对值小于10^(-5), 并统计出此时累计了多少项?
- 给定一个正整数n,要求找到最小的x(x>0)满足2^x mod n = 1。
- 面试题&笔试题:求1+x+x^2+x^3+...+x^n的和(尽可能少的使用乘法运算)
- 求1到N之间出现了几次数字x(x为1到9)
- 共有5中颜色的球若干个,取3个球,每个颜色都不同,问有多少种取法;
- 求特征数列(第n个数是第n-1个数和第n-2个数的和)的第X个数是多少
- @1x @2x和@3x.png 的区别
- Google Protocol Buffer 的使用和原理
- 关于MBR, Grub 的几个问题
- C语言的参数可变函数
- LINQ学习(一)基本概念
- 类的设计原则思考
- 算法题20 在1到n中选取若干个数,要求如果选了x就不能选2x和3x,问共有多少种选择方案?
- memcached的分布式算法
- 暂存链接
- protobuf在网络编程中的应用思考
- 深入Java核心精讲Java内存分配原理
- 在C#中ParameterizedThreadStart和ThreadStart区别
- 关于运算符重载
- 软件工程
- 解释器文件的参数问题(!/usr/bin/sed -n -f为什么报错)