贪心算法之田忌赛马问题
1.问题:田忌赛马”是历史上有名的揭示如何善用自己的长处去对付对手的短处,从而在竞技中获胜的事例。当时田忌和齐王赛马,他们各派出N匹马(N≤2000).每场比赛,输的一方要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱。每匹马的速度值是固定而且已知的,而齐王出马也不管田忌出马的顺序。请问田忌应该如何安排自己的马去对抗齐王的马,才能赢最多的钱?
2.设计思路:使用贪心算法去解决问题;如果齐王最好的马比田忌最好的马要厉害,那么让田忌最差的马和齐王的好马比较:输或者赢,都会消耗一匹齐王的好马;如果齐王的好马比不过田忌的好马,那么直接进行比较;如果是平局,就继续进行下一次的比较;直到双方的马都为0时结束;首先要对于双方的马进行排序,接下来比较按上述思路比较。
3.代码:
/*田忌赛马*/
#include <stdio.h>
#include <stdlib.h> //调用C语言标准库进行排序
#define N 3
int tj[N]={92,83,71};
int qw[N]={95,87,74}; int compare(const void *a, const void *b)
{return *(int*)a - *(int*)b; //由小到大排序//return *(int *)b - *(int *)a; 由大到小排序
}
int main()
{qsort(tj,N,sizeof(int),compare); //调用函数进行排序,升序 qsort(qw,N,sizeof(int),compare); int a=0,b=0;int n=N-1,m=N-1; //数组下标从0开始,所以第N个元素在数组中是N-1的位置 int count=0; //记录赢的次数 while(a<=m){if(tj[m]>qw[n]) //田忌的好马胜过齐王的好马,赢一次 {m--;n--;count++; }else if(tj[a]>qw[b]) //田忌的劣马胜过齐王的劣马,赢一次 {a++;b++;count++;} else if(tj[a]<qw[b]) //田忌的劣马比不过齐王的劣马,用田忌的劣马消耗一匹齐王的好马 {a++;n--;count--;}else{ //田忌的好马比不过齐王的好马,使用劣马换掉齐王的好马 if(tj[a]>qw[n]) //田忌的劣马胜过齐王的好马,赢一次{a++;n--;count++; }else if(tj[a]<qw[n]) //田忌的劣马换掉齐王的好马 {a++;n--;count--; }else{ //平局时进行下一次的比较 n--;a++;}} }printf("count=%d\n",count);printf("赢的金币数量为:%d\n",count*200);return 0;}
4.运行结果:
贪心算法之田忌赛马问题相关推荐
- 田忌赛马贪心算法_贪心算法之田忌赛马
你一定听过田忌赛马的故事吧? 如果3匹马变成1000匹,齐王仍然让他的马按从优到劣的顺序出赛,田忌可以按任意顺序选择他的赛马出赛.赢一局,田忌可以得到200两银子,输一局,田忌就要输掉20 ...
- 田忌赛马贪心算法_田忌赛马 贪心算法
算法实验课回顾 田忌赛马 问题描述: 你一定听说过田忌赛马的故事吧?如果3匹马变成n匹(n<=100),齐王仍然让他的马按照优到劣的顺序初赛,田忌可以按任意顺序选择他的赛马出赛.赢一局,田忌可以 ...
- 田忌赛马贪心算法_田忌赛马问题——贪心算法
关于输入 输入包含多组测试数据. 每组测试数据的第一行是一个整数n(1<=n<=1000),表示田忌和齐王都拥有n匹马.接下来一行是n个整数,表示田忌的马的速度,下一行也是n个整数,表示齐 ...
- 田忌赛马贪心算法_贪心算法解决田忌赛马
田忌赛马--对策问题 教学目标: 1.通过简单的事例,使学生初步体会对策论在解决... 梁锦美有无课件 上课时间 有 12 月 15 日 1 田忌赛马中的数学问题 课时... 同学们,你听过" ...
- 田忌赛马贪心算法_acm田忌赛马问题在线等急求!!
这个是问题:这里有一个非常著名的中国故事."大约2300年以前,田忌将军是齐国高级官员,他喜欢和国王还有其它的人赛马"."田忌和国王都有3匹不同档次的马,即普通的,好的, ...
- 55天 - 贪心算法 - 田忌赛马问题 openjudge百炼 2287
//模板#include <iostream> #include <cstdio> #include <string> #include <algorithm ...
- 贪心算法 田忌赛马问题
贪心算法 田忌赛马问题 这个题目贪心的本质在于:*田忌只在有把握赢的情况下拿出快马和王拼,否则用最慢的马比掉王的快马最大程度削弱王的战斗力 贪心策略: 1,如果田忌的最快马快于齐王的最快马,则两者比. ...
- POJ2287 田忌赛马---贪心算法
田忌赛马 题目详见http://poj.org/problem?id=2287 田忌赛马大家都听过,可是如果不是上中下三等马,而是很多匹马,优劣有很多种分类,就不仅仅是321的问题了. 这个很明显就是 ...
- 典型的贪心算法~ (田忌赛马 )
1. 田忌赛马 典型的贪心算法~~自己木有考虑到贪心的第二步导致wa了好多次 算法分析 Problem Description: 给出2N组数据,分别表示田忌和齐威王的N匹马的速度,没进行一场比赛( ...
- 用c语言实现田忌赛马(贪心算法)
用C语言实现田忌赛马(贪心算法) *首先,我们来回顾一下田忌赛马的题目. **题目描述] "田忌赛马"是历史上有名的揭示如何善用自己的长处去对付对手的短处,从而在竞技中获胜的事例. ...
最新文章
- expires与etag控制页面缓存的优先级
- 小说站 章节内容 ajax,第17章 作业分析与异步编程原理——2019年5月14日22:00
- “35 岁才是一个程序员成熟的开始!”
- 一点历史--Python
- Android 修改手机hosts域名 (绑定host域名 )
- 如何删除Cookie?
- HDU 4587 TWO NODES(割两个点的最大连通分支数)
- Python 字符串语法,for
- 【摘抄】其实我是间谍!
- python为什么叫爬虫-可以写爬虫的那么多,为什么只有python火了?
- 在线教育行业APP高效开发解决方案
- enctype=multipart/form-data 文件上传
- 通过反射调用方法会大大降低性能
- Leetcode之跳跃游戏Ⅱ
- 这次,华为选择了湖南大学、湘潭大学
- java极光推送demo_Java集成极光推送
- 通过建设银行外联平台进行转账/提现操作(Java)
- 公安大数据可视化指挥决策平台
- oracle 独占更新,Oracle的共享封锁 独占封锁和共享更新封锁 (3)
- 还原文件打开方式为未知应用程序
热门文章
- IE当前安全设置不允许下载该文件的解决办法
- AppBarLayoutCoordinatorLayoutBehavior
- kiv8测量方法_室内门标准及测量方法
- 整理 kanban 的 DoR 和 DoD
- cmd命令行怎样运行python,在CMD命令行中运行python脚本的方法
- html 隐藏广告代码,js漂浮广告原理 js或者CSS带关闭的漂浮广告代码
- 浅学socket及iOS中的AsyncSocket框架
- bzoj 3505: [Cqoi2014]数三角形 排列组合+数学
- 说说域名、二级域名和主机名的联系区别
- unity编辑器扩展篇-中文字段显示