丑数(USACO)
这个题是一个动态规划加优化的经典题
1246 丑数
USACO
题解
对于一给定的素数集合 S = {p1, p2, ..., pK},
来考虑那些质因数全部属于S 的数的集合。这个集合包括,p1, p1p2, p1p1, 和 p1p2p3 (还有其它)。这是个对于一个输入的S的丑数集合。
注意:我们不认为1 是一个丑数。
你的工作是对于输入的集合S去寻找集合中的第N个丑数。longint(signed 32-bit)对于程序是足够的。
第 1 行: 二个被空间分开的整数:K 和 N , 1<= K<=100 , 1<= N<=100,000.
第 2 行: K 个被空间分开的整数:集合S的元素
单独的一行,写上对于输入的S的第N个丑数。
4 19
2 3 5 7
27
- Navigation
- 题库
- 天梯
- 评测
- 题解
- 关于
1246 丑数
USACO
题解
回到问题
超出时间 Time Limit Exceeded
输入数据 (显示前20行)7 28888
2 3 5 11 17 23 31
测试点#1.in 结果:TLE 内存使用量: 492kB 时间使用量: 1000ms
测试点#2.in 结果:TLE 内存使用量: 256kB 时间使用量: 1000ms
测试点#3.in 结果:TLE 内存使用量: 256kB 时间使用量: 1000ms
测试点#4.in 结果:TLE 内存使用量: 256kB 时间使用量: 1000ms
测试点#5.in 结果:TLE 内存使用量: 1000kB 时间使用量: 1000ms
当时tag上打的是堆,然后就一直想啊想怎么用堆去写这个题,结果Tm看题解才发现是一道DP的题。。。。坑死我了。。。。。
思路
1:根据丑数定义,不难递推得到任何一个丑数是由它之前的丑数再×一个原数组的值来;然而。。。。。。。。。。。。。这样还是会超时。。。。。。。。。。。。。。。。。
那就再优化!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2:开辟一个w数组,记录从s[i]这个位置往后*ans[w[i]]才大于之前的ans[pp-1]值,并且这个乘得的值会不断更新ans[pp];再递推下去,每一轮递推都要更新w[i];
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#define INF 9999999999
using namespace std;
long long s[101],ans[10000001];
long long w[101];
long long k,n;
int main(){
scanf("%lld%lld",&k,&n);
for(long long i=1;i<=k;++i)scanf("%lld",&s[i]),w[i]=1;
ans[1]=1;
for(long long i=2;i<=n+1;++i){
long long minn=INF;
for(long long j=1;j<=k;++j){
while(ans[w[j]]*s[j]<=ans[i-1])w[j]++;
minn=min(minn,ans[w[j]]*s[j]);
}
ans[i]=minn;
}
printf("%lld",ans[n+1]);
return 0;
}
丑数(USACO)的更多相关文章
- AC日记——丑数 codevs 1246
1246 丑数 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 对于一给定的素 ...
- 插入排序的优化非希尔【不靠谱地讲可以优化到O(nlogn)】 USACO 丑数
首先我们先介绍一下普通的插排,就是我们现在一般写的那种,效率是O(n^2)的. 普通的插排基于的思想就是找位置,然后插入进去,其他在它后面的元素全部后移,下面是普通插排的代码: #include< ...
- 【USACO 3.1.3】丑数
[描述] 对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合.这个集合包括,p1, p1p2, p1p1, 和 p1p2p3 (还有其它).这是 ...
- 洛谷P2723 丑数 Humble Numbers
P2723 丑数 Humble Numbers 52通过 138提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目背景 对于一给定的素数 ...
- Luogu2723丑数Humble Numbers【归并排序】
Luogu2723丑数Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包 ...
- 洛谷P2723 丑数 Humble Numbers [2017年 6月计划 数论07]
P2723 丑数 Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包括, ...
- 剑指Offer面试题:29.丑数
一.题目:丑数 题目:我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一个 ...
- 剑指Offer:面试题34——丑数(java实现)
问题描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 思路1: ...
- UVA136 求第1500个丑数
枚举大范围数据..暴力检查题目条件 #include <iostream> #include <cstdio> #include <vector> #include ...
随机推荐
- 小学生之Hibernate插入数据修改数据使用数据库默认值的实现
最近在写一个案例,定时任务对数据库进行更新操作,废话不多说,上代码: @Component("taskJob") public class TaskJob extends Hibe ...
- 《JAVASCRIPT高级程序设计》第五章(2)
一.Date类型 Date类型类型用于保存日期,有以下几种创建方式: //获取当前时间 var now = new Date(); //获取当前时间的毫秒数 var nowSecond = Date. ...
- .Net程序员学用Oracle系列(13):合并语句(MERGE)
- 1.[**语法说明**](#segment1) - 1.1.[UPDATE 和 INSERT 可以只出现一个](#point11) - 1.2.[UPDATE 后面还可以再跟 WHERE](#po ...
- 2.JAVA垃圾回收机制
前言 线程独享的内存区域有程序计数器,虚拟机栈,本地方法栈,这些区域不用考虑内存回收的问题,随着线程的执行结束,自然就回收了,而堆内存和方法区的回收则不一样,他们的内存分配和回收是动态的. 1.对象存 ...
- foreach和for循环的区别
for循环 for循环,通过下标,对循环中的代码反复执行,功能强大,可以通过index取得元素.在处理比较复杂的处理的时候较为方便. foreach循环 foreach,从头到尾,对于集合中的对象遍历 ...
- 使用nat方式解决虚拟机联网问题
本文全文参考:http://jingyan.baidu.com/album/4e5b3e1957979d91901e24f1.html?picindex=1,谢谢 对于很多的linux初学者来说,最开 ...
- java线程之多个生产者消费者
温故一下上一节所学习的生产者消费者代码: 两个线程时: 通过标志位flag的if判断和同步函数互斥较好解决两个线程,一个生产者.一个消费者交替执行的功能 类名:ProducterConsumerDem ...
- ASP.NET MVC5 实现分页查询
对于大量数据的查询和展示使用分页是一种不错的选择,这篇文章简要介绍下自己实现分页查询的思路. 分页需要三个变量:数据总量.每页显示的数据条数.当前页码. //数据总量 int dataCount; / ...
- 《剑指offer》— JavaScript(21)栈的压入、弹出序列
栈的压入.弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5, ...
- 每天一个linux命令(36)--vmstat命令
vmstat 是 Virtual Memory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控.他是对系统的整体情况进行统计,不足之处是无法对某个进程进行 ...