• 洛谷 P2362 围栏木桩


    题目描述

    某农场有一个由按编号排列的n根木桩构成的首尾不相连的围栏。现要在这个围栏中选取一些木桩,按照原有的编号次序排列之后,这些木桩高度成一个升序序列。所谓的升序序列就是序列中的任何一个数都不小于它之前的任何一个数。试编写程序从这个围栏中选取合适的木桩使得选出的木桩个数t最大,并求出选取出t根木桩的方案总数c。

    输入输出格式

    输入格式:

    文件中的第一行只有一个数m,表明随后有m个问题的描述信息。每个问题的描述信息格式为n h1,h2,h3,…,hn(其中hi(i=1,2,3,…,n)表示第i根木桩的高度。)

    输出格式:

    依次输出每个问题中t和c的解。每行输出一个问题的解。

    输入输出样例

    输入样例#1:
    3
    9 10 1 9 8 7 6 3 4 6
    3 100 70 102
    6 40 37 23 89 91 12
    输出样例#1:
    4 1
    2 2
    3 3

    说明

    mle 5,nle 20,h_ile 150m5,n20,hi​​150

    序列dp 

    dp入门中。。

    屠龙宝刀点击就送

    #include <cstring>
    #include <cstdio>
    int max(int a,int b) {return a>b?a:b;}
    int Max,m,f[25],h[25],ans[25];
    int main()
    {
        scanf("%d",&m);
        for(int n;m--;)
        {
            scanf("%d",&n);
            int Max=0;
            memset(f,0,sizeof(f));
            memset(ans,0,sizeof(ans));
            for(int i=1;i<=n;i++)
                scanf("%d",&h[i]),f[i]=1,ans[i]=1;
            for(int i=2;i<=n;i++)
            {
                for(int j=i-1;j>=1;j--)
                {
                    if(h[i]>=h[j])
                    {
                        if(f[i]<f[j]+1)
                        {
                            f[i]=f[j]+1;
                            ans[i]=ans[j];
                        }
                        else if(f[i]==f[j]+1)
                            ans[i]++;
                    }
                }
            }
            int Ans=0;
            for(int i=1;i<=n;i++)
            {
                if(f[i]==Max) Ans+=ans[i];
                else if(f[i]>Max)
                {
                    Max=f[i];
                    Ans=ans[i];
                }
            }
            printf("%d %d
    ",Max,Ans);
        }
        return 0;
    }
    我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
  • 相关阅读:
    WIN7右下角的声音图标不见了
    无法解决 equal to 运算中 "Chinese_PRC_BIN" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突
    查看表空间信息SQL集合
    Oracle分区表
    Oracle数据库的创建、数据导入导出
    Oracle查询出最最近一次的一条记录
    adb命令
    synergy在Windows和ubuntu 多台PC共享一套键盘鼠标
    git add 之后因为没提交正确文件需要撤销
    make clean-kernel && make kernel
  • 原文地址:https://www.cnblogs.com/ruojisun/p/7356932.html
Copyright © 2020-2023  润新知