这个题是一个动态规划加优化的经典题

1246 丑数

USACO

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 钻石 Diamond

题解

题目描述 Description

对于一给定的素数集合 S = {p1, p2, ..., pK}, 

来考虑那些质因数全部属于S 的数的集合。这个集合包括,p1, p1p2, p1p1, 和 p1p2p3 (还有其它)。这是个对于一个输入的S的丑数集合。

注意:我们不认为1 是一个丑数。

你的工作是对于输入的集合S去寻找集合中的第N个丑数。longint(signed 32-bit)对于程序是足够的。

输入描述 Input Description

第 1 行: 二个被空间分开的整数:K 和 N , 1<= K<=100 , 1<= N<=100,000. 

第 2 行: K 个被空间分开的整数:集合S的元素

输出描述 Output Description

单独的一行,写上对于输入的S的第N个丑数。

样例输入 Sample Input

4 19

2 3 5 7

样例输出 Sample Output

27

数据范围及提示 Data Size & Hint

分类标签 Tags 点此展开

  • Navigation
  • 题库
  • 天梯
  • 评测
  • 题解
  • 关于

1246 丑数

USACO

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 钻石 Diamond

题解

回到问题

超出时间 Time Limit Exceeded

总耗时: 5000 ms
0 / 0 数据通过测试.
最近的错误点信息 1.in 1.out

输入数据 (显示前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)的更多相关文章

  1. AC日记——丑数 codevs 1246

    1246 丑数 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 对于一给定的素 ...

  2. 插入排序的优化非希尔【不靠谱地讲可以优化到O(nlogn)】 USACO 丑数

    首先我们先介绍一下普通的插排,就是我们现在一般写的那种,效率是O(n^2)的. 普通的插排基于的思想就是找位置,然后插入进去,其他在它后面的元素全部后移,下面是普通插排的代码: #include< ...

  3. 【USACO 3.1.3】丑数

    [描述] 对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合.这个集合包括,p1, p1p2, p1p1, 和 p1p2p3 (还有其它).这是 ...

  4. 洛谷P2723 丑数 Humble Numbers

    P2723 丑数 Humble Numbers 52通过 138提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目背景 对于一给定的素数 ...

  5. Luogu2723丑数Humble Numbers【归并排序】

    Luogu2723丑数Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包 ...

  6. 洛谷P2723 丑数 Humble Numbers [2017年 6月计划 数论07]

    P2723 丑数 Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包括, ...

  7. 剑指Offer面试题:29.丑数

    一.题目:丑数 题目:我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一个 ...

  8. 剑指Offer:面试题34——丑数(java实现)

    问题描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 思路1: ...

  9. UVA136 求第1500个丑数

    枚举大范围数据..暴力检查题目条件 #include <iostream> #include <cstdio> #include <vector> #include ...

随机推荐

  1. 算法笔记_017:递归执行顺序的探讨(Java)

    目录 1 问题描述 2 解决方案 2.1 问题化简 2.2 定位输出测试 2.3 回顾总结 1 问题描述 最近两天在思考如何使用蛮力法解决旅行商问题(此问题,说白了就是如何求解n个不同字母的所有不同排 ...

  2. [html5] 学习笔记-html5音频视频

    HTML5 最大的新特色之一就是支持音频和视频.在 HTML5 之前,我们必须使用插件如 Silverlight  或 Flash 来实现这些功能.在 HTML5 中,可以直接使用新标签< au ...

  3. 蓝桥网试题 java 基础练习 字母图形

    ----------------------------------------------------------------- 不知道说啥 感觉好像偏离主体思想了 但是这样写好简单 ------- ...

  4. 获取Pid

    Java程序中获取当前进程的进程ID 标签: javainterfacesystemcompilationjvmjni 2011-12-29 16:31 15182人阅读 评论(2) 收藏 举报  分 ...

  5. 微信小程序 引用其他js里的方法

    微信小程序中,在微信官方开发文档我们可以知道 小程序的目录结构 . 一个小程序页面由四个文件组成,一个小程序页面的四个文件具有相同路径与文件名,由此我们可知一个小程序页面对应着一个跟页面同名的js文件 ...

  6. indexOf()--数组去重

    @(JavaScript) 数组去重方法有多中,这里列举出自己认为比较容易理解的方法. 思路: 创建一个新的空数组,用来存放去重后的新数组. 利用for循环循环遍历需要去重的数组. 利用indexOf ...

  7. spring事件驱动模型--观察者模式在spring中的应用

    spring中的事件驱动模型也叫作发布订阅模式,是观察者模式的一个典型的应用,关于观察者模式在之前的博文中总结过,http://www.cnblogs.com/fingerboy/p/5468994. ...

  8. asp.net core mvc剖析:启动流程

    asp.net core mvc是微软开源的跨平台的mvc框架,首先它跟原有的MVC相比,最大的不同就是跨平台,然后又增加了一些非常实用的新功能,比如taghelper,viewcomponent,D ...

  9. block之---内存管理

    首先简单说下MRC和ARC MRC: 手动管理内存,需要自己去释放内存, 如果对象的引用计数器为0时对象就会被释放. 属性修饰策略:assign, retain, copy ARC: ARC是编译器特 ...

  10. java 多线程之卖票两种方式

    1.通过extends Thread /* 需求:简单的卖票,多个窗口同时买票 (共用资源) 创建线程的第二种方式:实现Runnable接口 步骤: 1,定义类实现Runnable接口 2,覆盖/重写 ...