田忌赛马
来源:互联网 发布:mac 升级10.8 编辑:程序博客网 时间:2024/04/28 16:14
这是一道经典的贪心算法的题目
主要的思想有:
1.当田忌最慢的马比齐王最慢的马快,赢一场先。因为始终要赢齐王最慢的马,不如用最没用的马来赢它。
2.当田忌最慢的马比齐王最慢的马慢,和齐王最快的马比,输一场。因为田忌最慢的马始终要输的,不如用它来消耗齐王最有用的马。
3.当田忌最慢的和齐王最慢的马慢相等时,分4和5讨论。
4.当田忌最快的马比齐王最快的马快时,赢一场先。因为最快的马的用途就是来赢别人快的马,别人慢的马什么马都能赢。
5.当田忌最快的马比齐王最快的马慢时,拿最慢的马和齐王最快的马比,输一场,因为反正要输一场,不如拿最没用的马输。
6.当田忌最快的马和齐王最快的马相等时,贪心方法是,拿最慢的马来和齐王最快的马比
#include<stdio.h>#include<algorithm>int main(){ int n,m,i,j; int tian[1001],king[1001]; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) scanf("%d",&tian[i]); for(i=0;i<n;i++) scanf("%d",&king[i]); std::sort(tian,tian+n); std::sort(king,king+n); int win=0,lose=0; int m=n-1; n=n-1; i=0;j=0; while(i<=n) { if(tian[i]<king[j])//田忌最慢比国王最慢还慢,就浪费国王的快马。。嘿嘿 { i++; m--; lose++; } else if(tian[i]>king[j])//田忌最慢比国王最慢还快,不用考虑,赢他呀 { win++; i++; j++; } else //田忌最慢与国王最慢相等,再考虑最快的之间比较,来判断怎么调用最慢的 { if(tian[n]>king[m]) //田忌最快的比国王快,国王弱爆了,赢他。。 { win++ ; n--; m--;} else { if(tian[i]<king[m]) //可能田忌最慢的比和国王最快的一样,因此此处才加这一句 lose++; i++; m--; } } } printf("%d\n",200*(win-lose)); } return 0;}
- 田忌赛马
- 田忌赛马
- 田忌赛马
- 田忌赛马
- nyoj364(田忌赛马)
- 田忌赛马
- nyoj364田忌赛马
- HDOJ1052田忌赛马
- acm-田忌赛马
- 田忌赛马
- 田忌赛马
- NYOJ364 田忌赛马
- nyoj364田忌赛马
- LA3266田忌赛马
- 田忌赛马
- 田忌赛马
- 田忌赛马
- poj2287 田忌赛马
- 解决Windows Server 2008 System进程占用80端口
- android之ListView
- Mysqldump备份和还原MySQL数据库!
- SELECT INTO 语句可用于创建表的备份复件
- mysql 自动备份发邮件 到指定邮箱
- 田忌赛马
- 想念那一池莲花
- ISO的OSI七层网络结构
- C语言相关 实习笔记
- UIApplicationDelegate协议定义的方法说明
- 让Django支持数据库长连接(可以提高不少性能哦)
- 如何分析网页元素并进行相应处理
- 哈希表Hashtable与字典表Dictionary<K,V>,谁胜谁优
- CREATE INDEX 语句