• E


    在这里插入图片描述
    题意:
    开始士兵们按照序号排队。
    但是站不齐。
    军官想让他们站齐。
    所以让一些士兵离开队伍。
    (只要士兵能看到 线的其中一个端点 就能排齐)
    要求: 求出至少要出去多少士兵。

    解:
    所以要两个数组。

    第一个数组存的是 一个士兵为结尾 从左到右身高升序的最大人数(i = 0 贪心 到 n -1)

    第二个数组存的是 一个士兵结尾 从右到左身高降序的最大人数。(i = n - 1 贪心到 0)

    (在线上的 士兵)可能的结果
    在这里插入图片描述
    知道线上的士兵最多还剩多少个 就知道最少要出去多少个

    #include <stdio.h>
    #include <stdlib.h>
    #include<string.h>
    int main()
    {
        int i, j;
        int n, pe[1005], de[1005];
        float h[1005];
        scanf("%d", &n);
        memset(pe, 0, sizeof(pe));
        memset(de, 0, sizeof(de));
        for(i = 0;i < n;i++)
        {
            scanf("%f", h+i);
        }
        
    
    
    
        for(i = 0;i < n;i++)//升序贪心
        {
            int max = 0;
            for(j = 0;j < i;j++)
            {
                if(h[j] < h[i])
                {
                    if(max < pe[j]+1)
                    {
                        max = pe[j]+1;
                    }
                }
            }
           pe[i] = max;
        }
        for(i = n-1;i >=0;i--)//降序贪心
        {
            int max = 0;
            for(j = n-1;j > i;j--)
            {
                if(h[j]< h[i])
                {
                    if(max < de[j]+1)
                    max = de[j]+1;
                }
            }
            de[i] = max;
    
        }
        int Ma = 0;
        for(i = 0;i < n;i++)
        {
            for(j = i;j < n;j++)
            {
                int t;
                if(i == j)t = 1;
                else t = 2;
                if(pe[i]+de[j]+t > Ma)
                {
                    Ma = pe[i]+de[j]+t;
                }
            }
        }
    
        printf("%d", n-Ma);
    
        return 0;
    }
    
  • 相关阅读:
    「题解」洛谷 P1731 [NOI1999]生日蛋糕
    「题解」洛谷 P1063 能量项链
    Log4j2笔记
    基数排序
    会计知识
    归并排序
    CF668 题解
    拉格朗日反演
    [国家集训队]数颜色 / 维护队列 「带修莫队」
    简单的填数「贪心」
  • 原文地址:https://www.cnblogs.com/TJack/p/10526951.html
Copyright © 2020-2023  润新知