小明の魔法计划——最长上升子序列[通俗易懂]

小明の魔法计划——最长上升子序列[通俗易懂]Think:1知识点:最长上升子序列2反思:知识体系需要加深拓展SDUT题目链接小明の魔法计划TimeLimit:1000MSMemoryLimit:65536KBProblemDescription在一个遥远的数学魔法国度,小明在学习一个魔法,这个魔法需要一些施法材料,所幸的是施法材料已经准备好了,下一步就是建立魔法阵了,每一个施法材料都有一个特性值,表示为一个大于1小

大家好,又见面了,我是你们的朋友全栈君。

Think:
1知识点:最长上升子序列
2反思:知识体系需要加深拓展

SDUT题目链接

小明の魔法计划
Time Limit: 1000MS Memory Limit: 65536KB

Problem Description
在一个遥远的数学魔法国度,小明在学习一个魔法,这个魔法需要一些施法材料,所幸的是施法材料已经准备好了,下一步就是建立魔法阵了,每一个施法材料都有一个特性值,表示为一个大于1小于10 ^ 7的整数,当且仅当一个材料的特性值是另一个材料的特性值的倍数的时候,他们才可以建立法力连接。比如说,一个特性值为6和一个特性值为9的施法材料是不可以建立法力连接的,而一个特性值为9和一个特性值为18的材料是可以建立法力连接的,值得注意的是法力连接是双向的。一个稳定的魔法阵要求属于这个法阵的材料之间不存在任何两个不直接连接的施法材料,比如说由(1,3,9)组成的魔法阵是稳定的,而(3,6,9)组成的魔法阵是不稳定的,因为值为6和值为9的材料无法建立连接。一个魔法阵的威力定义为这个法阵需要的材料的个数。
现在小明已经收集到了一些材料,他想要知道在知道他收集的材料的特性值的前提下,能建立的最大威力的魔法阵的消耗材料的数量是多少。

Input
首先一个整数T,代表数据组数(T<=80)
对于每一组数据,第一行是一个整数n,代表小明收集的施法材料的数量(1 < = n < = 1000)
接下来一行一个有n个数,以空格隔开,分别代表n个施法材料的特性值,每个数1 < = a < = 10 ^ 7
具体见样例

Output
每组数据输出一行一个整数,代表最大威力的魔法阵的需要的材料的个数

Example Input
2
5
1 2 4 8 16
8
12 24 1 2 4 8 72 16

Example Output
5
6

Hint
魔法阵不一定是矩阵,施法材料可以随意摆放。

Author
QAsQ

以下为Accepted代码

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1014;

int a[N], b[N];

int main(){
    int T, n, i, j, ans;
    scanf("%d", &T);
    while(T--){
        scanf("%d", &n);
        for(i = 0; i < n; i++)
            scanf("%d", &a[i]);

        sort(a, a+n);
        memset(b, 0, sizeof(b));

        ans = 0;
        for(i = 0; i < n; i++){
            int mav = 0;
            for(j = 0; j < i; j++){
                if(a[i]%a[j] == 0 && b[j] > mav)
                    mav = b[j];
            }
            b[i] = mav+1;
            ans = max(ans, b[i]);
        }
        printf("%d\n", ans);
    }
    return 0;
}


/*************************************************** User name: Result: Accepted Take time: 116ms Take Memory: 180KB Submit time: 2017-07-24 21:48:06 ****************************************************/

SDUT_1299_最长上升子序列

最长上升子序列
Time Limit: 3000MS Memory Limit: 65536KB

Problem Description
一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1<= i1 < i2 < … < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8)。
你的任务,就是对于给定的序列,求出最长上升子序列的长度。

Input
输入的第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000。

Output
最长上升子序列的长度。

Example Input
7
1 7 3 5 9 4 8

Example Output
4

Hint

Author
Northeastern Europe 2002

以下为Accepted代码

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1014;

int a[N], b[N];

int main(){
    int n, i, j, ans;
    while(~scanf("%d", &n)){
        for(i = 0; i < n; i++)
            scanf("%d", &a[i]);

        memset(b, 0, sizeof(b));

        ans = 0;
        for(i = 0; i < n; i++){
            int mav = 0;
            for(j = 0; j < i; j++){
                if(a[j] < a[i] && b[j] > mav)
                    mav = b[j];
            }
            b[i] = mav + 1;
            ans = max(ans, b[i]);
        }
        printf("%d\n", ans);
    }
    return 0;
}


/*************************************************** User name: Result: Accepted Take time: 0ms Take Memory: 196KB Submit time: 2017-07-24 22:01:14 ****************************************************/
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135599.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数字信号处理实验(一)

    实验目的本次实验目的为:在matlab环境下产生几种基本的数字信号,并对这些基本的信号进行运算和变换,同时利用程序结果对采样定理进行验证,深刻理解采样定理。通过自己录制音频信号并对不同的音频信号进行不同处理,加深理解音频信号中声道的原理,以及混声、回声的形成原理。实验内容用matlab产生单位脉冲信号,单位阶跃信号,矩形信号,正弦信号,余弦信号,指数信号,产生并观察f(x)=sinc(x)函数的波

    2022年4月8日
    105
  • intellij idea2021激活码(JetBrains全家桶)[通俗易懂]

    (intellij idea2021激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlBCEBXQ3A4G-eyJsa…

    2022年3月22日
    68
  • BufferedWriter写int型数据

    BufferedWriter写int型数据在做项目的过程中遇到用BufferedWriter.writer(…)写文件的,但是在写入int型数据时是乱码。在翻阅了API后发现,BufferedWriter.writer(intc)方法写的不是一个int型数据,而是一个character型数据:因此,在用BufferedWriter.writer写数据的时候,如果要写int型数据,可以先把它转成String型的数据,这样就

    2022年6月10日
    47
  • dubbo负载均衡策略配置

    dubbo负载均衡策略配置前言在生产环境中,服务的集群部署是常有的事,从消费端来说,本身并不关注所需要的服务是由哪台机器提供,但是为了应用的健壮性和高可用性,从消费端来说,可以配置一定的负载均衡策略,确保消费端的应用能够及时获取到服务的响应数据dubbo负载均衡策略dubbo内置了四种负载均衡算法供开发中调用random随机算法,是Dubbo默认的负载均衡算法,多台机器上的服务随机选取一台的服务进行调用,如果各机器的性能相差不大的情况下,可以考虑使用这种策略。但这种策略可能存在服务堆积问题roundrobin轮询

    2022年7月11日
    20
  • ResNet18代码实现[通俗易懂]

    ResNet18代码实现[通俗易懂]importtensorflowastffromtensorflowimportkerasfromtensorflow.kerasimportlayers,Sequential,Model,datasets,optimizers#自定义的预处理函数defpreprocess(x,y):#调用此函数时会自动传入x,y对象,shape为[b,28,28],[b]#标准化到0-1x=2*tf.cast(x,dtype=t…

    2022年5月9日
    244
  • zencart模板分析

    zencart模板分析ZenCart的模板设计说简单其实也挺简单的说复杂也比较复杂,需要一定的时间来熟悉。一旦你了解了它的结构,就会慢慢习惯了。首先要阅读常见问答部分的:如何添加、制作新模板。ZenCart的设计没有什么特别,与以前设计HTML页面是一样的。只是整个页面分成了好几个部分,并加入了php代码。(设计Zencart模板制作需要理解PHP和CSS样式定义)通常,页面分为页眉(header),页

    2022年7月27日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号