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: ...
随机推荐
- hibernate复习第(二)天
今日要点: 关联映射 多对一(Employee - Department) 一对多(Department - Employee) 一对一(Person - IdCard) 多对多(teachet - ...
- BEC listen and translation exercise 46
录音文件 https://pan.baidu.com/s/1qYYZGWO The process of learning and exploring a subject can lead to a ...
- C++ STL源码剖析
stl_config.h defalloc.h stl_alloc.h memory.cpp stl_construct.h stl_uninitialized.h stl_iterator.h ty ...
- codevs1060 搞笑世界杯
题目描述 Description 随着世界杯小组赛的结束,法国,阿根廷等世界强队都纷纷被淘汰,让人心痛不已. 于是有 人组织了一场搞笑世界杯,将这些被淘汰的强队重新组织起来和世界杯一同比赛.你和你的朋 ...
- 标准模板库(STL)学习指南之sort排序
对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思 ...
- Parallel Programming-多消费者,多生产者同时运行并行
在上一篇文章演示了并行的流水线操作(生产者和消费者并行同时执行),C#是通过BlockingCollection这个线程安全的对象作为Buffer,并且结合Task来实现的.但是上一篇文章有个缺陷,在 ...
- EF中调整字段的顺序
EF中设计数据库表结构时,在Designer UI中无法调整添加好的字段顺序. 方法: 1.在Solution Explorer中右击XXX.edmx文件, 选择"Open With&quo ...
- selenium webdriver frame操作,跳进跳出
如果有两个平级的frame,跳进一个以后操作完成再操作第二个,这种情况要先跳出来,再跳进另外一个frame 跳出语句:browser.switch_to_default_content() #codi ...
- 【转】 Pro Android学习笔记(四四):Dialog(1):触发Dialog
目录(?)[-] 创建dialog fragment Activity显示对话框 Android提供alert.prompt.pick-list,单选.多选,progress.time-picker和 ...
- centos7 查看启动ntp服务命令
标签(空格分隔): centos7 系统 1. 查看ntp服务命令: [root@node1 ~]# systemctl status ntpd * ntpd.service - Network Ti ...