首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
51nod1354 选数字
】的更多相关文章
51nod1354 选数字
01背包tle. 解题报告(by System Message) 类似于背包的DP,以乘积为状态.先把等选数字里面不是K约数的去掉.然后找出K的约数,进行离散化.然后dp[i][j]表示前i个数字乘积为j的状态.Dp[i+1][j*a[i+1]]]+=dp[i][j].Dp[i+1][j]+=dp[i][j];总的复杂度是O(n*d(k)*log(d(k)))D(k)表示k的因子数目.多一个log是因为离散化了,对应下标的时候要二分查找. 其实我觉得就是去掉没用的状态只用他的约数来更新.网上有的…
【题解】选数字 [51nod1354]
[题解]选数字 [51nod1354] 传送门:选数字 \([51nod1354]\) [题目描述] 共 \(T\) 组测试点,每一组给定一个长度为 \(n\) 的序列和一个整数 \(K\),找出有多少子序列满足子序列中所有元素乘积恰好等于K,答案对 \(1e9+7\) 取模. [样例] 样例输入: 2 3 3 1 1 3 3 6 2 3 6 样例输出: 4 2 [数据范围] \(100\%\) \(1 \leqslant T \leqslant 20,\) \(1 \leqslant N \l…
51 Nod 1354 选数字(体现动态规划的本质)
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 多组测试数据.在输入文件的第一行有一个整数T(0< T <=…
Qbxt 模拟题 day3(am) T3 选数字 (select)(贪心)
选数字 (select Time Limit:3000ms Memory Limit:64MB 题目描述 LYK 找到了一个 n*m 的矩阵,这个矩阵上都填有一些数字,对于第 i 行第 j 列的位置上 的数为 ai,j. 由于它 AK 了 noip2016 的初赛,最近显得非常无聊,便想到了一个方法自娱自乐一番. 它想到的游戏是这样的: 每次选择一行或者一列, 它得到的快乐值将会是这一行或者一列的 数字之和.之后它将该行或者该列上的数字都减去 p(之后可能变成负数) .如此,重复 k 次,它得到…
1354 选数字 DP背包 + 数学剪枝
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1354&judgeId=187448 其实这题和在若干个数字中,选取和为val,有多少种不同的选法是一样的. 只不过不能直接枚举背包容量,只能用map的iterate来枚举,这样来加速. 还有一个剪枝就是,所生成的数字要是val的约数,这些才加入去map那里,否则不加. 都是一些没用的状态. 还有这题不能用map的reverse_iterator,会蜜汁wa #inclu…
51nod P1354 选数字 题解
每日一题 day8 打卡 Analysis 背包+离散化 这题是我们一次模拟赛的T2,结果我的暴力全TLE了. 关键是如果将两个因数的乘积离散化在因数数组中之后等于这个乘积本身,说明a[j]*in离散化之后的下表可以通过+=ans[j]来计算 然后就可以愉快地dp啦~~~ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 1000+10…
Cogs 763. [USACO Open09] 数字的游戏(博弈)
[USACO Open09] 数字的游戏 ★☆ 输入文件:cdgame.in 输出文件:cdgame.out 简单对比 时间限制:1 s 内存限制:128 MB Bessie正跟FJ玩一个数字游戏,她想让你帮她赢. 游戏的第i局由一个整数N_i(1 <= N_i <= 1,000,000)开始,Bessie先手,接下来两个人交替进行,轮到谁时,她(他)可以在当前整数中挑一个最大的或最小的非零数字,并减去该数字,所得的差成为新的游戏数.比如若当前整数为3014,我们可以从中减去最大数字4或最小非…
【C语言程序设计】—最近超火的小游戏—【数字炸弹】!
✍ 准备工作和建议 一.程序的原理 在动手编程之前,得先跟大家说一下这个程序是干什么的. 我们可以称呼这个游戏为<数字炸弹>. 游戏的原理是这样: 每一轮电脑从 1 到 100 中随机抽一个整数. 电脑请求你猜这个数字,因此你要输入一个 1 到 100 之间的整数. 电脑将你输入的数和它抽取的数进行比较,并告知你的数比它的数大了还是小了. 然后它会再次让你输入数字,并告诉你比较的结果. 一直到你猜到这个数为止,一轮结束. 游戏的目的,当然就是用最少的次数猜到这个"神秘"数…
Oracle中生成随机数的函数(转载)
在Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个: DBMS_RANDOM.VALUE函数 该函数用来产生一个随机数,有两种用法: 1. 产生一个介于0和1之间(不包含0和1)的38位精度的随机数,语法为: DBMS_RANDOM.VALUE RETURN NUMBER; 这种用法不包含参数. 2. 产生一个介于指定范围之内的38位精度的随机数,语法为: DBMS_RANDOM.VALUE(low IN NUMBER,high IN N…
Uva 10891 经典博弈区间DP
经典博弈区间DP 题目链接:https://uva.onlinejudge.org/external/108/p10891.pdf 题意: 给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能从一端选取. 并且A B都尽力使自己选择的结果为最大的,可以理解成A B每一步走的都是最优的. 如果A先选择,则A B差值最大是多少. 分析: 总和是一定的,所以一个得分越高,另一个人的得分越低.当前状态总是最开始的状态的一个子状态. d(i,j): 先手取 i ~ j 最优策略下,得分最大值. d…