算法设计 || 第5题:田忌赛马-杭州电子科技大学(贪心算法)

news2024/11/23 11:02:56

 

目录

(一)杭电原题

(二)Please speak Chinese:

(三)手写草稿+理解思路+核心算法

第一款代码:

第二款代码:


(一)杭电原题

Tian Ji -- The Horse Racing


Problem Description

Here is a famous story in Chinese history.

"That was about 2300 years ago. General Tian Ji was a high official in the country Qi. He likes to play horse racing with the king and others."

"Both of Tian and the king have three horses in different classes, namely, regular, plus, and super. The rule is to have three rounds in a match; each of the horses must be used in one round. The winner of a single round takes two hundred silver dollars from the loser."

"Being the most powerful man in the country, the king has so nice horses that in each class his horse is better than Tian's. As a result, each time the king takes six hundred silver dollars from Tian."

"Tian Ji was not happy about that, until he met Sun Bin, one of the most famous generals in Chinese history. Using a little trick due to Sun, Tian Ji brought home two hundred silver dollars and such a grace in the next match."

"It was a rather simple trick. Using his regular class horse race against the super class from the king, they will certainly lose that round. But then his plus beat the king's regular, and his super beat the king's plus. What a simple trick. And how do you think of Tian Ji, the high ranked official in China?"



Were Tian Ji lives in nowadays, he will certainly laugh at himself. Even more, were he sitting in the ACM contest right now, he may discover that the horse racing problem can be simply viewed as finding the maximum matching in a bipartite graph. Draw Tian's horses on one side, and the king's horses on the other. Whenever one of Tian's horses can beat one from the king, we draw an edge between them, meaning we wish to establish this pair. Then, the problem of winning as many rounds as possible is just to find the maximum matching in this graph. If there are ties, the problem becomes more complicated, he needs to assign weights 0, 1, or -1 to all the possible edges, and find a maximum weighted perfect matching...

However, the horse racing problem is a very special case of bipartite matching. The graph is decided by the speed of the horses --- a vertex of higher speed always beat a vertex of lower speed. In this case, the weighted bipartite matching algorithm is a too advanced tool to deal with the problem.

In this problem, you are asked to write a program to solve this special case of matching problem.

Input

The input consists of up to 50 test cases. Each case starts with a positive integer n (n <= 1000) on the first line, which is the number of horses on each side. The next n integers on the second line are the speeds of Tian’s horses. Then the next n integers on the third line are the speeds of the king’s horses. The input ends with a line that has a single 0 after the last test case.

Output

For each input case, output a line containing a single number, which is the maximum money Tian Ji will get, in silver dollars.

Sample Input

3

92 83 71

95 87 74

2

20 20

20 20

2

20 19

22 18

0

Sample Output

200

0

0

Source

2004 Asia Regional Shanghai

(二)Please speak Chinese:

田忌赛马问题:

田忌和齐王赛马,两人各出 n 匹马,赢一场比赛得 200 两银子,输了赔 200 银子,平局不赔不赚. 已知两人每匹马的速度,问田忌最多能赢多少银子. 多组测试数据, 每组数据的第一行是一个整数 n。 (1<=n<=1000) 第二行包括 n 个整数既田忌每匹马的速度. 第三行包括 n 个整数既齐王每匹马的速度. 每匹马的速度不超过 1000. 对于每组数据输出一行有一个整数代表田忌最多能赢多少银子?

(三)手写草稿+理解思路+核心算法

第一款代码:

#include<bits/stdc++.h>

using namespace std;
int cmp(int a,int b){
    return a>b;
}//sort排序
int a[10000],b[10000];
int main(){
    int n,fa,fb,la,lb,cnt;
    while(cin>>n&&n!=0){
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }//读入田忌的马
        for(int i=1;i<=n;i++){
            cin>>b[i];
        }//读入齐王的马
        sort(a+1,a+n+1,cmp);
        sort(b+1,b+n+1,cmp);
        fa=1;
        la=n;
        fb=1;
        lb=n;//赋值最快最慢的马
        cnt=0;
    for(int i=1;i<=n;i++){
    if(a[fa]>b[fb]){
        cnt++;
        fa++;
        fb++;//(在数组里通过移动此变量的位置来实现当前最快最慢的马的赋值)
    }else if(a[la]>b[lb]){
        cnt++;
        la--;
        lb--;
    }else{
        if(a[la]<b[fb]){
            cnt--;
            la--;
            fb++;
        }
    }
}
cout<<cnt*200<<endl;
}
    return 0;
}

 

第二款代码:

这个代码写出来后,发现有一个小bug,输出结果第三种是错误的,应该为平局,实际却是200,感兴趣的伙伴可以找一下问题所在。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 1000
int tian[MAX_N]; // 田忌的马的速度
int qi[MAX_N]; // 齐王的马的速度
int cmp(const void *a, const void *b) {
    return *(int *)a - *(int *)b;
}
int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        int i;
        for (i = 0; i < n; i++) {
            scanf("%d", &tian[i]);
        }
        for (i = 0; i < n; i++) {
            scanf("%d", &qi[i]);
        }
        qsort(tian, n, sizeof(int), cmp);
        qsort(qi, n, sizeof(int), cmp);
        int tian_head = 0, tian_tail = n - 1, qi_head = 0, qi_tail = n - 1;
        int ans = 0;
        while (tian_head <= tian_tail) {
            if (tian[tian_head] > qi[qi_head]) {
                ans += 200;
                tian_head++;
                qi_head++;
            } else if (tian[tian_tail] > qi[qi_tail]) {
                ans += 200;
                tian_tail--;
                qi_tail--;
            } else {
                if (tian[tian_tail] > qi[qi_head]) {
                    ans += 200;
                }
                tian_tail--;
                qi_head++;
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/519128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【分治法】

目录 知识框架No.1 分治法基本思想No.2 合并排序No.3 快速排序一、基本思想三、效率分析四、快速排序不稳定例子 No.4 二叉树遍历及其相关特性一、基本概念二、中序遍历三、前序遍历四、二叉树的高度计算(高度不是深度) 知识框架 No.1 分治法基本思想 将规模为N的问题分解为k…

Spring MVC:常用参数(注解)的使用和参数绑定的验证

Spring MVC&#xff1a;常用参数&#xff08;注解&#xff09;的使用和参数绑定的验证 一、学习资源二、基础源码三、实验结果3.1 Spring MVC常用参数Controller和RequestMappingRequestMappingRequestParamPathVariableCookie ValueRequestHeader 3.2 Spring MVC参数绑定3.2.1…

一路对标顶级产品,奇遇XR为何仍不见起色?

临近6月&#xff0c;再度遇冷的XR行业&#xff0c;又让很多人充满期待。外界普遍认为&#xff0c;基于苹果酝酿多年的MR头显产品&#xff0c;将于6月举行的WWDC 2023全球开发者大会正式亮相&#xff0c;XR行业或将迎来“iPhone时刻”。 在一派期待中&#xff0c;一家国内XR企业…

代码审计之PHP基础铺垫

目录 1、标记 2、注释 3、输出语句 4、关键字 5、常量的定义与使用 6、预定义常量 7、变量的赋值&#xff08;传参赋值与引用赋值&#xff09; 8、可变变量 9、双引号和单引号的区别 10、heredoc结构和nowdoc结构 11、其他符号 1、标记 <?php 和 ?> 是PHP标…

第十一届蓝桥杯青少组省赛Python中/高级组编程题真题,包含答案解析

第十一届蓝桥杯青少组省赛Python中/高级组编程题真题 编程实现 第一题&#xff1a; 输入一个字符串&#xff0c;如果该字符串以er、Iy或者ing后缀结尾的&#xff0c;则删除该字符串后缀&#xff0c;并输出删除后的字符串&#xff0c;否者将原字符串输出。 输入描述 输入一个…

零知识证明:应用和具体用例

零知识证明&#xff08;Zero-Knowledge Proofs&#xff0c;ZKPs&#xff09;是应用密码学中令人兴奋的突破&#xff0c;将在各个行业中解锁新的用例&#xff0c;从 Web3 到供应链再到物联网。通过在不揭示信息的情况下验证其真实性&#xff0c;ZKPs 可以增强数字系统的隐私、安…

【Unity-UGUI控件全面解析】| Slider 滑动条组件详解

🎬【Unity-UGUI控件全面解析】| Slider 滑动条组件详解一、组件介绍二、组件属性面板三、代码操作组件四、组件常用方法示例4.1 充当 进度条控制灯光亮度4.2 模拟 血条 使用💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CS…

【Spring全家桶系列】面向切面编程AOP

⭐️前面的话⭐️ 本文已经收录到《Spring框架全家桶系列》专栏&#xff0c;本文将介绍面向切面编程的思想和相关概念&#xff0c;附加一个小案例。 &#x1f4d2;博客主页&#xff1a;未见花闻的博客主页 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&a…

基于Kubernetes集群构建大中型企业CICD应用平台(2)--code阶段工具gitlab安装

这里我们为gitlab服务器准备一台虚拟机&#xff1a;192.168.19.6-gitlab服务器 在code阶段&#xff0c;我们需要将不同版本的代码存储到一个仓库中&#xff0c;常见的版本控制工具就是SVN或者Git&#xff0c;这里我们采用Git作为版本控制工具&#xff0c;GitLab作为远程仓库。…

django常用命令/vue-cli图形化界面创建方式/vueo-cli命令行创建方式/若依框架/elementui

django常用命令 django-admin.exe startproject mysite python .\manage.py startapp app01 python manage.py makemigrations python manage.py migrate python manage.py runserver python manage.py runserver 0.0.0.0:8000 from django.shortcuts import render,Http…

【Linux学习】多线程——同步 | 条件变量 | 基于阻塞队列的生产者消费者模型

多线程——同步 | 条件变量 | 基于阻塞队列的生成者消费者模型 &#x1f3d3;生产者消费者模型&#x1f3f8;同步概念&#x1f3f8;生产者消费者模型的特点 &#x1f3d3;同步的应用&#x1f3f8;条件变量&#x1f3f8;条件变量接口 &#x1f3d3;基于阻塞队列的生产者消费者模…

文心一言 VS chatgpt (16)-- 算法导论4.1 1~2题

一、当A的所有元素均为负数时&#xff0c;FIND-MAXIMUM-SUBARRAY返回什么? 文心一言&#xff1a; 当A的所有元素均为负数时&#xff0c;FIND-MAXIMUM-SUBARRAY返回-1。 这是因为在二进制中&#xff0c;当所有元素均为负数时&#xff0c;A的每个元素都对应一个负数&#xff…

基于Kubernetes集群构建大中型企业CICD应用平台(4)--Operate阶段工具

还是在192.168.19.7-CentOS-7.6-jenkins-new这台服务器上进行操作 部署过程&#xff0c;会采用Docker进行部署&#xff0c;暂时只安装Docker即可&#xff0c;后续还需安装Kubenetes 4.1 Docker安装 准备测试环境&生产环境 下载Docker依赖组件 # yum -y install yum-uti…

vue+express+mysql做一个简单前后端交互,从数据库中读取数据渲染到页面

1.下载上次的包 npm I &#xff0c;同时下载新的包 axios 2.打开数据库服务器&#xff0c;同时使用新建数据库一样&#xff0c;数据包名 3.新建一个项目 4.全局注册axios 5.新建一个server文件夹&#xff08;里面在建一个index.js的主文件&#xff09;用来放我们后端写的东西 …

设计模式——单一职责模式之桥模式

文章目录 前言一、“单一职责” 模式二、Bridge 桥模式1、动机2、模式定义3、伪代码示例4、结构 总结 前言 一、“单一职责” 模式 在软件组件的设计中&#xff0c;如果责任划分的不清晰&#xff0c;使用继承得到的结果往往是随着需求的变化&#xff0c;子类急剧膨胀&#xff…

【C++STL】map/set源码封装简单分析

文章目录 一. 问题的抛出二. 红黑树的实现三. map/set实现四. 分析五. KeyOfValue仿函数结束语 一. 问题的抛出 我们知道C的STL中map和set的底层都是红黑树。 但是仔细思考一下&#xff0c;map是存储键值对&#xff0c;也就是Key_Value模型 而set是Key的模型 那么STL中的红黑树…

apisdk-starter自动装配的思路与应用

apisdk-starter整体思路 首先定义开发者定义的开放接口声明为原始类&#xff0c;javassist生成的类是增强类。 使用springboot的EnableAutoConfiguration和Import触发Spring扫描组件扫描原始类&#xff0c;得到所有BeanDefinition拓展FactoryBean&#xff0c;构造函数的参数为…

力扣算题Day20

98.验证二叉搜索树(了解二叉树的性质,才是编写此道题代码的基础) 做题伤着了&#xff1a;这道题我做的时候&#xff0c;看到别人写的代码很长&#xff0c;懒得看&#xff0c;直接干。自己编写代码&#xff0c;没有了解平衡二叉树的性质&#xff0c;然后出现了下图[0,-1]、[0]的…

落地页设计的营销心理学(一)

营销落地页的作用&#xff0c;是为了促进目标用户转化。但如何提升转化率&#xff0c;这就需要我们了解用户在浏览落地页行为背后的动机、心理活动是什么&#xff0c;才能更好地制定营销策略。 营销心理学是指应用心理学原理来解释、预测和影响人们购买决策的一门学科。在落地页…

Goby 漏洞更新 |华视私云-CDN直播加速服务器默认口令漏洞

漏洞名称&#xff1a;华视私云-CDN直播加速服务器默认口令漏洞 English Name&#xff1a;Sinovision Cloud CDN live default passwd CVSS core: 6.5 影响资产数&#xff1a;737 漏洞描述&#xff1a; 华视私云-CDN直播加速服务器是一款用于CDN直播加速的服务器。华视私云…