hdu1052 田忌赛马 —— 贪心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1052
错误代码:
#include<stdio.h>//田忌赛马,错误版
#include<string.h>
#include<stdlib.h>
/*思路:用田忌最快的马与齐王最快的马比较,1.若能赢就赢;2.若赢不了,就用最差的马拖齐王最好的马入水;3.若打平:要判断是否在最好一匹马,
若是,则打平,若不是,则用最差的一匹马拖它下水,虽然输了这次,但下次有机会赢回。看似无差别,但这样做却保留了最多的好马。
然而这种思靠虽然完备,但方向一开始已经错了。为什么田忌自己赛会输,因为他用最好的马与最好的马去比,硬碰硬。然而孙膑的想法是
避其锋芒,攻其弱点,也就是说,要赢比赛,就要尽量在齐王的弱马上赢,因为这样成本低,收益更大。而不是在齐王的强马上赢得比赛。
所以比赛从齐王最弱的马开始kill。
int cmp(const void*a, const void*b)
{
return *(int*)b - *(int*)a;
} int main()
{
int n,i,j,m,t[1010],k[1010];
while(scanf("%d",&n) && n)
{
for(i = 0; i<n; i++) scanf("%d",&t[i]);
for(i = 0; i<n; i++) scanf("%d",&k[i]);
qsort(t,n,sizeof(t[0]),cmp);
qsort(k,n,sizeof(k[0]),cmp); m = 0;
int th = 0,tt = n-1,kh = 0;
while(kh<n)
{
if(t[th]>k[kh]) {th++;kh++;m++;}
else if(t[th]<k[kh]) {tt--;kh++;m--;}
else
{
if(kh==n-1) {th++; kh++;}
else {tt--; kh++; m--;}
}
} printf("%d\n", m*200);
}
return 0;
}
正确代码:
#include<stdio.h>//正确方案,从弱马开始
#include<string.h>
#include<stdlib.h> int cmp(const void*a, const void*b)
{
return *(int*)b - *(int*)a;
} int main()
{
int n,i,j,m,t[1010],k[1010];
while(scanf("%d",&n) && n)
{
for(i = 0; i<n; i++) scanf("%d",&t[i]);
for(i = 0; i<n; i++) scanf("%d",&k[i]);
qsort(t,n,sizeof(t[0]),cmp);
qsort(k,n,sizeof(k[0]),cmp); m = 0;
int th = 0,tt = n-1,kh = 0,kt = n-1;
while(th<=tt)
{
if(t[tt]>k[kt])//田弱能赢齐弱,则赢
{tt--; kt--; m++;}
else if(t[tt]<k[kt])//田弱输齐弱,反正都要死,这匹弱马就要死得最有价值,用它去拖齐强下水
{tt--;kh++; m--;}
else
{
/*田弱平齐弱,总体来说,这匹田弱拿去拖齐强下水,那么田忌获胜的机会更大些,但有例外,
就是万一这匹弱马死得不值呢:田强本来就可以赢齐强,还何必用田弱拖它下水,况且齐弱本可以平局,
这样搞就反而输掉了一局*/
if(t[th]>k[kh])//所以这里要判断田强是否赢齐强,看看田弱是否死得有价值
{th++; kh++; m++;}//死得没价值,这局就让田强赢齐强
else if(t[th]<k[kh])//死得有价值,上吧,田忌会记住你的
{tt--; kh++; m--;} else //田强平齐强,为了保存实力,也让齐弱上(但田弱不一定输)。
{
if(t[tt]<k[kh]) m--;//田弱可能平田强,当田强平齐强时,要判断田弱是否真的弱于田强,可能打平
tt--; kh++;
}
}
}
printf("%d\n", m*200);
}
return 0;
}
hdu1052 田忌赛马 —— 贪心的更多相关文章
- hdu1052(田忌赛马 贪心)
好坑的一道题,不过确实是贪心的一道好题,想了好久一直无法解决平局的情况. 参考了别人的思路,然后结合了自己的想法,总算是想出来了. 这题有些步骤是必须要执行的,有四个步骤 一.当期状态田忌的最慢的马 ...
- HDU-1052(贪心策略)
Tian Ji -- The Horse Racing Problem Description Here is a famous story in Chinese history. "Tha ...
- POJ 2287 田忌赛马 贪心算法
田忌赛马,大致题意是田忌和国王赛马,赢一局得200元,输一局输掉200元,平局则财产不动. 先输入一个整数N,接下来一行是田忌的N匹马,下一行是国王的N匹马.当N为0时结束. 此题为贪心算法解答,有两 ...
- HDU 1052(田忌赛马 贪心)
题意是田忌赛马的背景,双方各有n匹马,下面两行分别是田忌和齐王每匹马的速度,要求输出田忌最大的净胜场数*每场的赌金200. 开始的时候想对双方的马匹速度排序,然后比较最快的马,能胜则胜,否则用最慢的马 ...
- [POJ2287][Tyvj1048]田忌赛马 (贪心+DP)
瞎扯 很经典的一道题 考前才打 我太菜了QAQ 就是先贪心排序了好 然后在DP 这样比直接DP更容易理解 (其实这题做法还有很多) 代码 #include<cstdio> #include ...
- hdu-1052(贪心)
链接 [https://vjudge.net/contest/261555#problem/I] 题意 就是两个人都有n匹马,每只马都有战力 第二个人出马的顺序是战力大到小,请问第一个人采取怎样的策略 ...
- luogu P1650 田忌赛马 |贪心
题目描述 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马.他和齐王都有三匹马:常规马,上级马,超级马.一共赛三局,每局的胜者可以从负者这里取得200银币. ...
- 【集训笔记】贪心算法【HDOJ1052 【HDOJ2037
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- 【贪心】[hdu1052]Tian Ji -- The Horse Racing(田忌赛马)[c++]
Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
随机推荐
- 推荐一款基于 AI 开发的 IDE 插件,帮助提升编码效率
最近在浏览技术社区的时候,发现了一款神奇 IDE 插件,官网称可以利用 AI 帮助程序员写代码,一下子吸引了我的好奇心.赶紧下载下来使用一番,感觉确实蛮神奇,可以火速提升编程效率. 这款插件叫做 ai ...
- kafka生产者客户端
kafka的生产者 1. 生产者客户端开发 熟悉kafka的朋友都应该知道kafka客户端有新旧版本,老版本采用scala编写,新版本采用java编写.随着kafka版本的升级,旧版本客户端已经快 ...
- Java中泛型T和Class<T>以及Class<?>的理解(转)
注意:class是java的关键字, 在声明Java类时使用; Class类的实例表示Java应用运行时的类(class ans enum)或接口(interface and annotation)( ...
- Javao中使用Jackson反序列时,将LinkedHashMap转成对象的方法(将任何Object类型转成实体)
可能存在这样一种情况,Jackson已经满足了大部分的序列化和反序列化工作,但是对于复杂的泛型实体估计未必能如愿的正常反序列,而此时对于一些泛型里面的实体对象就会反序列化成LinkedHashMap类 ...
- systemtap学习笔记及疑问
http://blog.csdn.net/sunnybeike/article/details/7769663
- 在C#的数据类型中,什么属于值类型,什么属于引用类型
转自原文 在C#的数据类型中,什么属于值类型,什么属于引用类型 类型:整数,浮点数,高精度浮点数,布尔,字符,结构,枚举引用类型:对象(Object),字符串,类,接口,委托,数组除了值类型和引用类型 ...
- 织梦dedecms 去掉后台登陆验证码的方法
那么有什么办法解决呢? 那么现在就给大家解决织梦去掉后台登陆验证码. 这里面分两种版本 一个是织梦5.6的程序 那么织梦5.6程序的解决办法是: 在织梦DedeCms5.6版本可以通过下面路径对验 ...
- 记一次CDH修改IP
因机房服务器搬迁,需要修改CDH ip ,集群中有6台服务器. 其中配置了ldap,其中卡在了ldap中的坑太深,所以记录一下. 一.服务器IP等地址修改 1.首先在安装cloudera-manage ...
- c# Dictionary拓展2个key得到1个value
using System.Collections.Generic; using System.Collections; Dictionary<Tuple<int, int>, int ...
- 我的Android进阶之旅------>怎样解决Android 5.0中出现的警告: Service Intent must be explicit:
我的Android进阶之旅-->怎样解决Android 5.0中出现的警告: java.lang.IllegalArgumentException: Service Intent must be ...