【 OJ 】 HDOJ1052 贪心模拟田忌赛马 [ 46 ]

2023-11-02

转自 https://www.cnblogs.com/Open_Source/archive/2010/07/09/1904940.html

解题思路:贪心算法。根本思想是要让田忌花最小的代价来胜一每一场,让齐王花最大的代价来胜每一场。(“代价”可以用比较的两匹马的权值之差来形象地表示)

首先将两人的马排序。

(让田忌每一匹马实现自己的最大价值)这时如果田忌最劣的马是所有中最劣的,就让它跟齐王最强的比较(这时对于田忌的这匹劣马来说并不会比其它的情形坏,因为它注定要输)齐王的最强马没了,对于田忌其他马来说胜率更大,如果田忌最劣的马不是最劣的,说明这匹马强于齐王最劣的,那就让它们比较,让田忌胜出(按照贪心仔细想想,如果让每一匹马的价值最大,其实操作应该更加复杂,假设田忌最差的是t_low,速度为80,齐王最差的是k_low1,速度68,第二差的k_low2 速度79,如果需要价值最大化,应该用t_low去胜K_low2)(但是实际上并不需要,因为t_low2速度大于t_low1,前两场无论田忌怎么出t_low1和2一定胜,但是如果K_low3速度大于t_low3,最终还是2胜一败,虽然实现了最大价值,但是并没有改变结果)


原文:https://blog.csdn.net/lawrencesgj/article/details/8001638 

*
贪心策略:
1,如果田忌的最快马快于齐王的最快马,则两者比。
(因为若是田忌的别的马很可能就赢不了了,所以两者比)
2,如果田忌的最快马慢于齐王的最快马,则用田忌的最慢马和齐王的最快马比。
(由于所有的马都赢不了齐王的最快马,所以用损失最小的,拿最慢的和他比)
3,若相等,则比较田忌的最慢马和齐王的最慢马
3.1,若田忌最慢马快于齐王最慢马,两者比。
(田忌的最慢马既然能赢一个就赢呗,而且齐王的最慢马肯定也得有个和他比,所以选最小的比他快得。)
3.2,其他,则拿田忌的最慢马和齐王的最快马比。
(反正所有的马都比田忌的最慢马快了,所以这匹马必输,选贡献最大的,干掉齐王的最快马)

我的是从最慢的马开始弄的....思路基本相同

#include<iostream>
# include<algorithm>
using namespace std;
int t[1000], k[1000];
int main(void) {
	int n;
	cin >> n;
	while (n) {
		for (int i = 0; i < n; i++)
			cin >> t[i];//田的马
		for (int i = 0; i < n; i++)
			cin >> k[i];//王的马
		sort(t, t + n);
		sort(k, k + n);
		int tlow, klow, tfast, kfast;
		tlow = klow = 0;
		tfast = kfast = n - 1;
		int twin, kwin; twin = kwin = 0;
		for (int i = 0; i < n; i++) {
			if (t[tlow] < k[klow]) {//最差对王最强
				tlow++; kfast--; kwin++;
			}
			else if (t[tlow] == k[klow]) {
				//看快马
				if (t[tfast] > k[kfast]) {
					 tfast--; kfast--; twin++;
				}
				else {//快马相等或者没有王快都是用慢马消耗
					if (k[kfast] > t[tlow])kwin++;
					tlow++; kfast--;
				}
			}
			else {//田忌慢马赢
				tlow++; klow++; twin++;
			}
		}
		cout << (twin - kwin) * 200<<endl;
		cin >> n;//下一轮
	}
	system("pause");
	return 0;
}

下面是我的自检方法:之前一直AC不了,写了个自检来找错误案例

# include<iostream>
#include<algorithm>
#pragma warning (disable:4996)
using namespace std;
int t[1010], k[1010];
int R(void) {//伪随机自检
	int randn= (rand() % 10) + 1;
	for (int i = 0; i < randn; i++) {
		t[i] = (rand() % 99 )+ 1;
		k[i]= (rand() % 99) + 1;
	}
	return randn;
}
//正确答案
int Y(int n) {
	int  i, awin, bwin, afast, bfast, aslow, bslow;
	sort(t, t + n);
	sort(k, k + n);
	awin = bwin = 0;//记录赢的次数 
	afast = bfast = n - 1;//标记最快的马 
	aslow = bslow = 0;//标记最慢的马 
	for (i = 0; i < n; ++i)
	{
		if (t[aslow] >k[bslow])
		{
			awin++;
			aslow++; bslow++;
		}
		else if (t[aslow] < k[bslow])//用最慢马消耗国王的最快马 
		{
			bwin++;
			aslow++; bfast--;
		}
		else//两匹最慢马速度相同时 
		{
			if (t[afast] > k[bfast])
			{
				awin++;
				afast--; bfast--;
			}
			else if (t[aslow] < k[bfast])//如果田忌的最快马不能胜国王的最快马,则用慢马消耗 
			{
				bwin++;
				aslow++; bfast--;
			}
		}
	}
	return (awin - bwin) * 200;
}
//我的答案
int My(int n) {
	int tlow, klow, tfast, kfast;
	tlow = klow = 0;
	tfast = kfast = n - 1;
	int twin, kwin; twin = kwin = 0;
	for (int i = 0; i < n; i++) {
		if (t[tlow] < k[klow]) {//最差对王最强
			tlow++; kfast--; kwin++;
		}
		else if (t[tlow] == k[klow]) {
			//看快马
			if (t[tfast] > k[kfast]) {
				 tfast--; kfast--; twin++;
			}
			else {//快马相等或者没有王快都是用慢马消耗
				if (k[kfast] > t[tlow])kwin++;
				tlow++; kfast--;
			}
		}
		else {//田忌慢马赢
			tlow++; klow++; twin++;
		}
	}
	return (twin - kwin) * 200;
}
int main()
{
	int nn,time=0;
	while ((time++)<100000) {
		cout << time << endl;
		nn = R();
		int yre = Y(nn);
		int mre = My(nn);
		if (yre != mre) {
			for (int i = 0; i < nn; i++) {
				cout << t[i] << " ";
				if (!((i + 1) % 10))cout << endl;
			}
			cout << "出现答案不同的案例:" << endl;
			cout << "--------------------------------";
			cout << endl << nn << endl;
			cout << "________正确答案:" << yre << endl;
			cout << "________我的答案:" << mre << endl;
			cout << "---------------------------------";
			cout << endl << endl << endl;
			for (int i = 0; i < nn; i++) {
				cout << k[i] << " ";
				if (!((i + 1) % 10))cout << endl;
			}
			system("pause");
		}
	}
	system("pause");
	return 0;
}


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【 OJ 】 HDOJ1052 贪心模拟田忌赛马 [ 46 ] 的相关文章

  • CSS&JavaScript讲解

    CSS 概念 全称 Cascading Style Sheets 层叠样式表 用于美化页面 布局页面 层叠 多个样式可以作用在同一个html的元素上 同时生效 好处 功能强大 将内容展示和样式控制分离 降低耦合度 解耦 让分工写作更容易 提
  • QQ分享失败原因

    通过qq分享链接到QQ空间 QQ当中 分享失败 要么就是调起qq后调不起分享框 排查了很久才找到原因 原来是分享的url链接不正确
  • PAT-B 1032 挖掘机技术哪家强 (20分)

    为了用事实说明挖掘机技术到底哪家强 PAT 组织了一场挖掘机技能大赛 现请你根据比赛结果统计出技术最强的那个学校 输入格式 输入在第 1 行给出不超过 10 5 的正整数 N 即参赛人数 随后 N 行 每行给出一位参赛者的信息和成绩 包括其
  • leetcode3 链表相加

    package 剑指offer 我们要明白链表逆序的好处 4 gt 2 gt 5 5 gt 8 gt 1 9 gt 0 gt 7 第一 数需要对齐 尤其是两个数不是相同位数的情况 那么那就回想一下 我们做加法都是尾部对齐 而不是头部 这样的
  • 如何在pycharm使用Anaconda下载的库

    如何在pycharm使用Anaconda下载的库 这篇文章 介绍了如何在pycharm项目 project 里建立Anaconda环境 从而引用anaconda下载的库 site packages 但我个人使用后发现 换了虚拟环境后无法实现
  • 旋转的矩阵-c++

    旋转的矩阵 数据结构 题目描述 给定一个n m的矩阵 请以顺 逆时针交替旋转的方式打印出每个元素 Input Format 第一行n m 0
  • Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.executor

    报错信息 Error getting generated key or setting result to parameter object Cause org apache ibatis executor ExecutorExceptio
  • 毕业设计课题大全

    Java毕业设计课题大全 https blog csdn net My IT Road article details 90341793 软件工程毕业设计集合 https blog csdn net linzhiqiang0316 arti
  • tutk云平台服务器_哪家云服务器便宜?各家云平台活动详解【持续更新】

    不知不觉 双十一已经近在眼前 作为一年一度的购物狂欢节 无论对于商家还是消费者来说 都是一次畅快购物的饕餮盛宴 对于云平台来说 自然不会错过一年中绝佳的营销机会 各种优惠活动也是纷至沓来 在讨论哪家云服务器便宜之前 我们先来看看该如何选择云
  • 微信登录总结公众号登录小程序登录企业微信登录

    微信公众号 服务号登录 微信内部网页授权 第一步 请求CODE https open weixin qq com connect oauth2 authorize appid APPID redirect uri REDIRECT URI
  • VC6.0打开文件以及向工程中添加文件时程序崩溃自动退出

    换了一台电脑 vc6 0程序中 点击打开文件以及向工程中添加文件时 程序竟然崩溃自动退出了 不知什么原因 安装相同的vc程序 本本竟然出现此缘故 但是这个操作又是自己经常用到的 所以不得不解决 与上一台电脑不同的是 此电脑是win7系统 而
  • 最小二乘拟合平面——拉格朗日乘子法

    目录 一 算法原理 二 代码实现 1 python 2 matlab 三 算法效果 一 算法原理 设拟合出的平面方程为 a x b
  • tinyhttp

    博客园 http www cnblogs com letlifestop Tinyhttpd 是J David Blackstone在1999年写的一个不到 500 行的超轻量型 Http Server 用来学习非常不错 可以帮助我们真正理
  • c++中和c语言不相同的地方

    c 糅合了c语言的语法 并且在c语言的基础上进行了改进 并且具有向下兼容的特性 但是c 改进了什么东西呢 今天就来学习一下吧 目录 命名空间 namespace cout与cin与endl 流插入符与流运算符 using namespace
  • [MySql]JDBC编程

    JDBC 即Java Database Connectivity java数据库连接 是一种用于执行SQL语句的Java API 它是Java中的数据库连接规范 这个API由 java sql javax sql 包中的一些类和接口组成 它
  • Vite unplugin-auto-import插件 自动引入组件

    文章目录 一 参考 二 快速入门 三 开发问题 3 1 解决eslint 报错的问题 3 2 解决 typescritp 报错的问题 unplugin auto import 自定义配置说明 一 参考 unplugin auto impor
  • QT textBrowser 设置每个字符串的颜色和大小

    QT textBrowser 设置每个字符串的颜色和大小 QT中textBrowser每行显示不同颜色 解决 Qt textBrowser 每行字体设置中的 n 缺失问题 原理 字体采用 html语言进行设置 方法 1 需要采用 appen
  • windows10 mvn安装后不是内部命令

    好气啊 maven 命令不识别 扒拉了半天 结果把全路径仍path一份就好使了 先记着吧
  • VS2010中C#调用C函数

    VS2010中C 调用C函数 2013 07 22 16 12 50 转载 分类 C Concept 1 创建C本地DLL文件 1 1 创建Win32Dll项目 1 2 创建DLL 点击完成 1 3 在 头文件 里新建文件 CPPLibra
  • 最小点覆盖问题详解

    那么一如既往 还是个人觉得学习某一个知识点之前先粗俗的了解其是个什么东东 然后再去了解概念比较好 那么下面结合题目来了解 首先最最重要的是理解题意 有k个任务 每个任务task i可以用机器A的x i模式做 也可以由机器B的y i模式做 值

随机推荐

  • 6款非常好用的设计软件盘点

    近年来 随着社会的发现 中国的设计行业也取得了快速的进步 人们对设计的要求越来越高 设计师也越来越多 设计成本也在上升 作为一名设计师 找到合适的设计软件尤为重要 以下是一些我认为有用的设计软件 供您参考 1 figma Figma是一个U
  • Linux网络莫名其妙ping不通外网

    做实验之前 网络设置一切正常 一开始能成功ping通外网 但是过一会儿就出问题 yum也用不了 查了所有的配置都没有任何问题 最后尝试了一下将原来的网段更换 将虚拟机里的虚拟网络编辑器NAT模式的子网IP更换一个网段 原来是158网段 现更
  • 利用Github快速搭建个人博客总结(亲测)

    近一年多时间一直都在用CSDN 讲真这个CSDN有时候资料很多 我也很自豪加入这个大家庭 不过身边有两个同学 一个在github托管了属于自己的博客 另一个在云上面编写了属于自己的博客 后者的理由是 CSDN太low 上面很多都是转发的文章
  • 机器学习—支持向量机理论详细推导(含例题讲解)(二)

    7 最大间隔算法 算法 输入 T x 1
  • 修改镜像配置后 启动docker失败

    背景 systemctl start docker失败 输出如下 systemctl restart docker Job for docker service failed because the control process exit
  • 机器学习中的类别不均衡问题

    基础概念 类别不均衡 指在分类算法中 不同样本类别的比例悬殊比较大 会对算法的学习过程造成重大干扰 比如 一个二分类的问题上 有1000个样本 其中5个正样本 995个负样本 在这种情况下 算法只需将所有的样本预测为负样本 那么它的精度也可
  • FTP协议详解

    一 FTP协议的概述 1 文件传送协议 File Transfer Protocol 是互联网上使用的最广泛的文件传输协议 用于Internet上的控制文件的双向传输 2 FTP提供交互式的访问 允许客户指明文件类型与格式 并允许文件具有存
  • Makefile(面试必备)

    1 Makefile基本介绍 1 1 makefile介绍 make是一个工程管理器 它可以根据文件时间自发检测更新的文件从而减少编译量 makefile文件和make工具一起使用 用于控制工程项目的编译和链接 也可以用来编写手册页和程序的
  • nginx部署vue项目并访问后端接口遇到 503 服务器不可用

    nginx部署vue项目并访问后端接口遇到Uncaught in promise Error Request failed with status code 503 今天在一台阿里云上部署了springboot后端 并测试通过 但是在部署v
  • pytorch版本官网命令

    COMMANDS FOR VERSIONS gt 1 0 0 v1 8 0 Conda OSX conda conda install pytorch 1 8 0 torchvision 0 9 0 torchaudio 0 8 0 c p
  • 多维时序

    多维时序 MATLAB实现GWO GRU灰狼算法优化门控循环单元的多变量时间序列预测 目录 多维时序 MATLAB实现GWO GRU灰狼算法优化门控循环单元的多变量时间序列预测 预测效果 基本介绍 程序设计 参考资料 预测效果 基本介绍 M
  • homestead实现外部局域网络其他主机的访问

    homestead 2 0 MAC环境 修改Homestead目录下的Vagrantfile文件 加上这么一行 config vm network public network ip 192 168 1 XXX IP地址为该局域网内其他未被
  • 手把手教你写购物车(完整篇1)

    购物车的设计与思路 1 在做任何业务的时候 首先要做的是把思路的流程捋清楚 再进行代码的编写 以及实现 2 对业务涉及到的技术 如果没接触过的 首先要学习至会用为止 3 如果思路不是很清楚的 可以查找类似的案列情况 学习思路流程 4 具体的
  • 攻克3D神器Blender的第五天-【多边形建形、旋转】

    目录 前言回顾 功能预览 多边形建形 旋转 前言回顾 不熟悉快捷键属性的可以点击传送门预览 传送门 官网地址 传送门 攻克3D神器Blender的第一天 快捷键 传送门 攻克3D神器Blender的第二天 挤出 传送门 攻克3D神器Blen
  • 笔记:《深入浅出统计学》第五章:概率分布(均值、方差、线性变换)

    随机变量的概率分布是描述随机变量取所有不同值的概率 对于随机变量x 概率函数给出随机变量取每一种值的概率 记f x 离散型概率函数的基本条件 1 对于任意随机变量的取值 函数值都是大于等于0 2 随机变量的所有取值对应的概率之和为1 常见的
  • 【C语言】符号常量(#define)

    举例 define XY RX 100 用法 define 标识符 常量 其中 标识符一般全大写 单词之间用 下划线分割
  • gin库的的理解以及简单使用

    gin库的作用 在实验当中 可能存在同一模型下使用不同的数据集参数进行训练时 就需要多次输入一些相同类型的参数 从而造成时间的浪费 gin库就是为了统一化操作这些参数而出现的 它允许函数或类被注释为 gin configurable 这样就
  • 微信小程序(typescript) npm添加Tdesign UI组件库

    最近 发现一个新的微信小程序UI组件库 TDesign 腾讯自家出品 颜值杠杆 网址如下 https tdesign tencent com miniprogram getting started 安装 使用NPM Node js 安装包及
  • Java使用Aspose-Words实现Word转换Pdf

    一 在项目中引入Aspose Words依赖 下载地址 http pan baidu com s 1nvbJwnv 建议将jar包下载下来并上传到自己公司的私服里去
  • 【 OJ 】 HDOJ1052 贪心模拟田忌赛马 [ 46 ]

    转自 https www cnblogs com Open Source archive 2010 07 09 1904940 html 解题思路 贪心算法 根本思想是要让田忌花最小的代价来胜一每一场 让齐王花最大的代价来胜每一场 代价 可