51nod 算法马拉松7 B.选数字
2015-11-02 18:28
246 查看
1354 选数字
基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
当给定一个序列a[0],a[1],a[2],...,a[n-1] 和一个整数K时,我们想找出,有多少子序列满足这么一个条件:把当前子序列里面的所有元素乘起来恰好等于K。
样例解释:
对于第一个数据,我们可以选择[3]或者[1(第一个1), 3]或者[1(第二个1), 3]或者[1,1,3]。所以答案是4。
Input
Output
Input示例
Output示例
我的方法:
类似01背包问题,但是空间太大了。
所以这里用的是map<int,int>g,只保存一些有用的状态,即能整除k的数。
官方解题报告
类似于背包的DP,以乘积为状态。先把等选数字里面不是K约数的去掉。然后找出K的约数,进行离散化。
根据这个写的代码(参考代码)
其实一早就看出是背包的DP了,但是map不熟悉,一些细节没有把握好,代码实现能力还有待提升。其实以前做个离散化的一个题,没有总结自己以前做过的题,没有联想以前做过的题,一做不出来容易浮躁。哎!!还是太年轻了!!
基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
当给定一个序列a[0],a[1],a[2],...,a[n-1] 和一个整数K时,我们想找出,有多少子序列满足这么一个条件:把当前子序列里面的所有元素乘起来恰好等于K。
样例解释:
对于第一个数据,我们可以选择[3]或者[1(第一个1), 3]或者[1(第二个1), 3]或者[1,1,3]。所以答案是4。
Input
多组测试数据。在输入文件的第一行有一个整数T(0< T <= 20),表示有T组数据。 接下来的2*T行,会给出每一组数据 每一组数据占两行,第一行包含两个整数n, K(1<=n<=1000,2<=K<=100000000)他们的含意已经在上面提到。 第二行包含a[0],a[1],a[2],...,a[n-1] (1<= a[i]<=K) 以一个空格分开。 所有输入均为整数。
Output
对于每一个数据,将答案对1000000007取余之后输出即可。
Input示例
2 3 3 1 1 3 3 6 2 3 6
Output示例
4 2
我的方法:
类似01背包问题,但是空间太大了。
所以这里用的是map<int,int>g,只保存一些有用的状态,即能整除k的数。
官方解题报告
类似于背包的DP,以乘积为状态。先把等选数字里面不是K约数的去掉。然后找出K的约数,进行离散化。
根据这个写的代码(参考代码)
其实一早就看出是背包的DP了,但是map不熟悉,一些细节没有把握好,代码实现能力还有待提升。其实以前做个离散化的一个题,没有总结自己以前做过的题,没有联想以前做过的题,一做不出来容易浮躁。哎!!还是太年轻了!!
相关文章推荐
- 节点的nodeName与nodeValue
- FAQ 前端面试题大杂烩
- TelephoneManage类详解
- [国嵌攻略][043][栈初始化]
- Python 多线程
- memcached性能测试 twemperf
- UIslider滑块大小
- BdAsyncTask学习
- uva 1218 Perfect Service 树形dp
- Hive 中如何使用符合数据结构 maps,array,structs
- 安卓开发之 Intent的介绍
- nfs原理-摘自《鸟哥的linux私房菜》
- CentOS Linux解决Device eth0 does not seem to be present
- servlet
- Git 操作命令
- eclipse 遇到 exit code = 13 , count find java_home解决方案
- 图片Uri,从其中获取到图片路径。
- 判断URL是否支持断点续传?
- SQL 游标
- Django+python 日志文件配置