码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 贪心算法之经典题目---订票


    题目:一票务办公室为音乐会售票,出售某一固定数量的连号票(简称套票)。购票订单以该套票中最小的座位号作为标志。由于不能满足所有订单,故而采用:若订单完全满足观众要求的票全价;若订单中至少一个座位与观众要求不同,则半价。现求怎样处理订单,才能使总收入最高。输入为套票里座位数量,订单数以及每个订单对应的座位号(最小的座位号为标志)。输出订单处理结果,即处理后的套票号码。(不要求顺序,且输入数据都符合要求,最小座位号为1,订单可以不被接受。)

    解题思路:

    采用贪心算法,3个步骤:

    1)  试图分配尽可能多的全价套票。

    逆序处理。按照座位号递减的次序来处理订单,只要可行就立马接受该订单。记为s1。

    2)  调整s1以减少浪费。

    正序处理。若要用订单p来代替p1,就要求p

    3)  用半价票填充空位。

    剩余未被接受的订单全取半价票,填充s2中全价套票之间的空位。记为s3。

    代码:

     1 #include 
     2 #include 
     3 #include 
     4 #include 
     5 #include 
     6 #include 
     7 #include 
     8 #include 
     9 
    10 using namespace std;
    11 
    12 #define ll long long
    13 
    14 const int maxl=100;//座位数上限
    15 const int nl=50;//订单数上限
    16 int len,n;//套票座位长度,订单数
    17 int nn[nl],tnn[nl];
    18 bool bn[nl]={};
    19 
    20 int main()
    21 {
    22     //freopen("D:\\input.in","r",stdin);
    23     //freopen("D:\\output.out","w",stdout);
    24     int tn,tc=0,tc2=0;
    25     scanf("%d %d",&len,&n);
    26     for(int i=0;i=0;i--)//the first choose
    31     {
    32         if(nn[i]>tn)    continue;
    33         bn[i]=1;
    34         tc++;
    35         tn=nn[i]-len;
    36     }
    37     tn=1;
    38     for(int i=0;i=nn[i]+len)
    50             {
    51                 bn[i]=1;
    52                 tn=nn[i]+len;
    53                 break;
    54             }
    55             else
    56             {
    57                 if((nn[i]-1)%len<(nn[j]-1)%len)
    58                 {
    59                     bn[i]=1;
    60                     bn[j]=0;
    61                     tn=nn[i]+len;
    62                 }
    63                 break;
    64             }
    65         }
    66     }
    67     tc=n-tc;
    68     tn=1;
    69     for(int i=0;i
                    
  • 相关阅读:
    [云原生] [kubernetes] 有了K8S的新基建,云原生起航了 !
    【多线程】线程与进程的区别与联系
    Java中的Maven是什么?
    C++项目——云备份-④-服务端配置信息模块设计与实现
    ThingsBoard移动端应用的使用
    Java面试题初级准备
    uniapp实现登录组件之外区域置灰并引导登录
    Web前端教学实录:深入剖析前端技术的奥秘
    MySQL之索引
    docker-compose安装和使用(自启、redis、mysql、rabbitmq、activemq、es、nginx、java应用)
  • 原文地址:https://blog.csdn.net/jackson61/article/details/128053695
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号