博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod 1354:选数字
阅读量:6910 次
发布时间:2019-06-27

本文共 845 字,大约阅读时间需要 2 分钟。

51nod 1354:选数字

题目链接:

题目大意:有$T(T \leqslant 20)$组数据,每组给出$n(n \leqslant 1000)$个数和$K(K \leqslant 100,000,000)$,问在这$n$个数中选取若干个,积为$K$的方案数有多少.

DP+离散化

与01背包类似,定义状态$dp[i][j]$为前$i$个数中选取若干个数,积为$j$的方案数.

但积过大($K \leqslant 100,000,000$),考虑到实际有用状态并不多,有用状态为$dp[i][d]$,其中$d$为$K$的因数.

故可以预处理出$K$的因数,将其离散化,从而把第二维降到$D(K)$,$D(K)$表示$K$的因子数.

算法时间复杂度为$O(n \times D(K) \times lg(D(K)))$,$lg$为离散化所带来的时间.

代码如下:

1 #include 
2 #include
3 #include
4 #include
5 #define N 1005 6 using namespace std; 7 typedef long long ll; 8 const ll M=1000000007; 9 int T,n,K,a[N],k,fact[N],dp[N][N],t,ans;10 int main(void){11 scanf("%d",&T);12 while(T--){13 memset(dp,0,sizeof(dp));14 scanf("%d%d",&n,&K);15 for(t=1,k=0;t*t

 

转载于:https://www.cnblogs.com/barrier/p/6662431.html

你可能感兴趣的文章
linux企业常用服务---haproxy+nginx搭建web高可用集群
查看>>
win7 断开 共享连接的操作方法
查看>>
CTSSD服务无法正常启动:Failure 4 in trying to open SV key PROCL-4/PROCL-5 clsctss_r_av2
查看>>
再议OPEN CURSOR与BULK COLLECT
查看>>
我的友情链接
查看>>
jquery attr与prop
查看>>
casatwy组件化方案
查看>>
Linux中ls对文件进行按大小排序和按时间排序
查看>>
Unix/Linux下安装NPM
查看>>
Apache与Tomcat区别联系
查看>>
洪水***源码
查看>>
用shell编写批量打包日志脚本
查看>>
nginx访问白屏
查看>>
Pentaho6.1中D3可视化库的集成及数据联动的实现
查看>>
部署LyncServer2013之七 启动服务和登陆LyncServer控制面板
查看>>
Android开发者:你真的会用AsyncTask吗?
查看>>
马哥2016全新Linux+Python高端运维班第四周作业
查看>>
使用qemu工具创建虚拟机模板示例
查看>>
MySQL order by后对其他索引的干扰,导致优化器走错索引
查看>>
CentOS 5.8 64位 源码安装mysql5.5.28
查看>>