51nod 1354【DP】
(我一定是A了一题假DP)
给定序列a[0],a[1],a[2],...,a[n-1] 和一个整数K时,
有多少子序列所有元素乘起来恰好等于K。
K<=1e8;
思路:
感觉 k 的 约数是突破口,首先个数 少。
直接维护一个 到 i 的时候 各个约数 的 个数。(约数 类似 背包)。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod=1e9+7;
const int N=1e3+10;
int num,a[N];
map<int,int>mp;
vector<int>xs;
vector<LL>dp; void init(int n)
{
dp.clear();
mp.clear();
xs.clear();
mp[1]=1;
mp[n]=1;
xs.push_back(1);dp.push_back(0);
xs.push_back(n);dp.push_back(0);
int q=sqrt(n),p;
for(int i=2;i<=q;i++)
{
if(n%i) continue;
p=n/i;
mp[p]=1;
mp[i]=1;
xs.push_back(i);dp.push_back(0);
if(i!=p)
{
xs.push_back(p);dp.push_back(0);
}
}
sort(xs.begin(),xs.end());
} int main()
{
int n,T,k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
init(k); int ind,sz,temp,ind2;
sz=xs.size(); for(int i=0;i<n;i++)
{
scanf("%d",&a[i]); if(mp.find(a[i])==mp.end())
continue;
ind=lower_bound(xs.begin(),xs.end(),a[i])-xs.begin(); for(int j=sz-1;j>=ind;j--)
{
if((xs[j] % a[i])==0)
{
temp=xs[j] / a[i];
ind2=lower_bound(xs.begin(),xs.end(),temp)-xs.begin();
dp[j]=(dp[ind2]+dp[j])%mod;
}
} dp[ind]=(dp[ind]+1LL)%mod;
}
printf("%lld\n",dp[sz-1]);
} return 0;
}
51nod 1354【DP】的更多相关文章
- 51nod 1154【DP】
区间DP大暴力吧?GG. dp[ i ] 为字符至 i 的最少数量. 如果[Left , Right]是回文串, dp[Right] = min(dp[ Right ] , dp[Left-1] + ...
- 51nod 1268【dp】
思路: 很水的dp吧...问的都是能否组成.. 哦对,这里sum最大才2e7,不会是2e9所以放心dp #include<cstdio> #include <map> #inc ...
- 51nod 1050【DP】
思路: 就是先正常的dp一下求一个最大连续子串,然后特殊情况就是sum-最小连续子串.. 比一比谁大谁小就好了 #include <stdio.h> #include <string ...
- Kattis - honey【DP】
Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...
- HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】
HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...
- HDOJ 1501 Zipper 【DP】【DFS+剪枝】
HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- HDOJ 1257 最少拦截系统 【DP】
HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDOJ 1159 Common Subsequence【DP】
HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- HDOJ_1087_Super Jumping! Jumping! Jumping! 【DP】
HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
随机推荐
- MySQL查询in操作 查询结果按in集合顺序显示
偶尔看到的...或许有人会注意过,但我以前真不知道 SQL: select * from table where id IN (3,6,9,1,2,5,8,7); 这样的情况取出来后,其实,id还是按 ...
- Linux课程---4、Linux目录结构及常用命令(目录结构)
Linux课程---4.Linux目录结构及常用命令(目录结构) 一.总结 一句话总结: 家目录:./root:root用户的家目录 能执行的程序:./bin:所有用户都能执行的程序:./sbin:只 ...
- Struts 2简介
Struts 2简介 Struts 2 编辑 同义词 Struts2一般指Struts 2 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中 ...
- 分享知识-快乐自己:PageHelper 分页关键基础代码
关键代码:点我下载样式 详细介绍 //使用分页插件 jQuery("#pagination").pagination(data.total, { items_per_page: ...
- 一个很有参考意义的unity博客
http://blog.csdn.net/lyh916/article/details/45133101
- AMD模块定义规范
AMD 即Asynchronous Module Definition,中文名是“异步模块定义”的意思.它是一个在浏览器端模块化开发的规范,服务器端的规范是CommonJS. 模块将被异步加载,模 ...
- type为number的input标签输入小数的方法
纠结了一段时间都没找出方法,最后灵光一现想出这个方法,没想到测试下果然成功了! 看目前网上几乎很难找到相对应的解决方法,所以这里分享出来,如果有更佳方法欢迎提出. 方法如下: <input ty ...
- php-fpm进程内存泄漏
线上服务器内存报警 线上web8G内存的服务器,内存几乎吃光,top查看,发现php-fpm进程每个都是几十M,php-fpm配置static, 一共150个 解决 排除过程中,其他机器相同配置都没有 ...
- windows下面的python的MySQLdb环境安装
什么是MySQLdb? MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的. 如何安装MySQ ...
- (转)python set 用法
转载自:http://hi.baidu.com/����_xu/blog/item/5b9650c513bd3f049d163d8b .html python的set和其他语言类似, 是一个 基本功能 ...