• 贪心算法之搬桌子问题


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace SeqListSort
    {
        /// <summary>
        /// <ather>
        /// lihonlin
        /// </ather>
        /// <content>
        ///  搬桌子问题
        ///  某教学大楼一层有n个教室,从左到右依次编号为1、2、…、n。现在要把一些课桌从某些教室搬到
        ///  另外一些教室,每张桌子都是从编号较小的教室搬到编号较大的教室,每一趟,都是从左到右走,
        ///  搬完一张课桌后,可以继续从当前位置或往右走搬另一张桌子。输入数据:先输入n、m,然后紧接
        ///  着m行输入这m张要搬课桌的起始教室和目标教室。输出数据:最少需要跑几趟。
        ///  Sample Input
        ///  10 5 
        ///  1 3
        ///  3 9
        ///  4 6
        ///  6 10
        ///  7 8
        ///  Sample Output
        ///  3
        /// </content>
        /// </summary>
        public struct  Room
        {
            public int start;
            public int end;
        }
        class Greedy_Desk
        {
            const int size = 20;
            static int m;
            static int n;
            static Room[] room = new Room[size];
            static bool[] isMove = new bool[size];
            static int min = 0;
    
            static void InitData()
            {
                Console.WriteLine("请输入n个教室");
                n = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("请输入m行课桌");
                m = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("输入这m张要搬课桌的起始教室和目标教室");
                for (int i = 0; i < m;  ++i)
                {
                    room[i].start = Convert.ToInt32(Console.ReadLine());
                    room[i].end = Convert.ToInt32(Console.ReadLine());
                }
                
            }
            static void Sort()
            {
                
                for (int i = 0; i < m; ++i)
                {
                    for (int j = 0; j < m - i - 1; ++j )
                    {
                        if (room[j].start > room[j + 1].start)
                        {
                            int temp = room[j].start;
                            room[j].start = room[j + 1].start;
                            room[j + 1].start = temp;
                        }
                    }
                }
            }
            public static void MoveDesk()
            {
                InitData();
                Sort();
                int num = 0;
                while ( num < m )
                {
                    int temp = 0;
                    for (int i = 0; i < m; ++i )
                    {
                        if (temp <= room[i].start && !isMove[i])
                        {
                            temp = room[i].end;
                            isMove[i] = true;
                            num++;
                        }
                    }
                    min++;
                }
    
                Console.WriteLine("最少需要跑{0}趟", min);
            }
        }
    }
  • 相关阅读:
    strongswan--HA
    RFC8221 -- 密码算法实现要求和使用指南
    strongswan--ikev2软件架构
    strongswan--ike sa状态机
    strongswan--ipsec.conf配置文件分析
    strongswan--linux内核ipsec policy类型
    strongswan--配置Charon-systemd问题解决
    strongswan——IKE建立过程
    GCC入门
    MPLS-TP OAM各个层次
  • 原文地址:https://www.cnblogs.com/lihonglin2016/p/4299077.html
Copyright © 2020-2023  润新知