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: ...
随机推荐
- java:Map借口及其子类HashMap五,identityHashMap子类
java:Map借口及其子类HashMap五,identityHashMap子类 了解:identityHashMap子类 一般情况下,标准的Map,是不会有重复的key值得value的,相同的key ...
- javascript通用参数判断
//判断value是小于等于max的数字function isNumberMax(value, max){ if(!isNumber(value) || !isNumber(max)){ ...
- django admin后台显示H5颜色选项卡
一般使用django后台,特别是有颜色的字段的时候避免手动输入一大推的颜色,可以使用h5颜色选项卡,这样用户就直接可以通过选项卡来选择自己所需的颜色.这个时候可以通过后台admin form来进行定制 ...
- Java丨验证码图片去除干扰像素,方便验证码的识别
1.先来看看效果: 原图 除去干扰像素后 2.解析代码: 1).读取文件夹里面的图片 String fileName = "picture"; BufferedImage img ...
- git内部原理-第一篇
本人计划写一些关于<git内部原理>的文章 计划每周一篇
- 常规DLL与扩展DLL区别
1.常规DLL可以被各种程序(python,VB等)调用,扩展DLL只能被MFC程序调用.提供给外部使用的控件类只能用扩展DLL. 2.扩展DLL的入口函数是DllMain(),而常规DLL入口是继承 ...
- numpy.ndarray类型的数组元素输出时,保留小数点后4位
因为计算结果数组中每个值都是很长的一串小数,看起来比较乱,想格式化一下输出方式. 这是个看起来很简单的问题,但是方法找了很久. 方法也是看起来很简单,用 numpy.set_printoptions( ...
- ffmpeg混音(将多个声音合成一个)命令
ffmpeg命令中可以使用filter amix实现这个功能. 官方文档 http://ffmpeg.org/ffmpeg-filters.html 6.8 amix Mixes multiple a ...
- CH#24C 逃不掉的路 和 HDU3686 Traffic Real Time Query System
逃不掉的路 CH Round #24 - 三体杯 Round #1 题目描述 现代社会,路是必不可少的.任意两个城镇都有路相连,而且往往不止一条.但有些路连年被各种XXOO,走着很不爽.按理说条条大路 ...
- 【LeetCode】080. Remove Duplicates from Sorted Array II
题目: Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For ex ...