nyoj364(田忌赛马)
来源:互联网 发布:阿里云企业邮箱好用吗 编辑:程序博客网 时间:2024/05/18 06:12
nyoj364(田忌赛马)
大体题意:田忌与国王赛马,赢一局田忌加200,输一局田忌减200,问田忌最多能得多少钱,可以是负的
392 83 7195 87 74220 2020 20220 1922 18
20000
解题思路:
贪心贪赢,从大的开始比较,如果大的比较可以赢,就让大的比,
目的:为了己方小的与对方大的比较时赢得胜利的几率增大,如果大的赢不了,
先不认输,让小的比较,赢了就比,赢不了,就拉上对方大的(为什么还要比较?
因为前几次都没有比较是否相等,此次是为了让输得次数加一,有可能己方小的与对方大的相等),为了下一次大的比较时,让己方大的赢得几率大。
贪心贪两方面:
1.贪本局赢(多赚钱)
2.贪队友赢(为队友留下更大赢得几率)
#include <stdio.h>#include <algorithm>int tian[1000];int king[1000];int result, n;int getres(){ result = 0; int nk = n-1, ks = 0, tk = 0; n--; while (true) { if (tian[n] > king[nk]) // 大的可以赢,为小的与大的比较时留下赢得希望 { nk--; n--; result += 200; } else if (tian[tk] > king[ks]) // 小的可以赢,可以赢就赢白,别浪费了 { ks++; ++tk; result += 200; } else if (tian[tk] < king[nk]) // 小的输了,拉大的下马,为大的比较留下希望 { nk--; ++tk; result -= 200; } else // 平局 { ks++; ++tk; } if (ks > nk) break; } printf("%d\n", result);}int main(){ while (~scanf("%d", &n)) { for (int i=0; i<n; ++i) scanf("%d", &tian[i]); for (int i=0; i<n; ++i) scanf("%d", &king[i]); std::sort(tian, tian+n); std::sort(king, king+n); getres(); }return 0;}
- nyoj364(田忌赛马)
- nyoj364田忌赛马
- NYOJ364 田忌赛马
- nyoj364田忌赛马
- NYOJ364田忌赛马
- NYOJ364 田忌赛马
- nyoj364田忌赛马【贪心】
- nyoj364 田忌赛马 贪心
- 田忌赛马
- 田忌赛马
- 田忌赛马
- 田忌赛马
- 田忌赛马
- HDOJ1052田忌赛马
- acm-田忌赛马
- 田忌赛马
- 田忌赛马
- LA3266田忌赛马
- 卖乌龟的叔叔好像说过你只要拿出一只筷子
- 微信开放平台Android常见问题
- 预处理(条件编译)
- 关于matlab中textread
- 陈亮穷人续写广东省南海东方六社小学
- nyoj364(田忌赛马)
- linux下tomcat启动不了
- Linux下c开发 之 线程通信
- 深入分析Java ClassLoader原理
- 360 2013校园招聘笔试题(含参考答案)
- Linux多线程编程(不限Linux)
- sqlplus set用法
- C#阶乘
- getJSON 缓存