-->
当前位置:首页 > 题库 > 正文内容

程序填空题:求解田忌赛马问题(贪心法)

Luz4年前 (2021-05-10)题库794
齐威王与大将田忌赛马。双方约定每人各出300匹马,并且在上、中、下三个等级中各选一匹进行比赛,由于齐威王每个等级的马都比田忌的马略强,比赛的结果可想而知。现在双方各n匹马,依次派出一匹马进行比赛,每一轮获胜的一方将从输的一方得到200银币,平局则不用出钱,田忌已知所有马的速度值并可以安排出场顺序,问他如何安排比赛获得的银币最多。

```c++
#include
#include
using namespace std;
#define MAX 1001
//问题表示
int n;
int a[MAX];
int b[MAX];
//求解结果表示
int ans;
void solve() //求解算法
{
sort(a,a+n); //对a递增排序
sort(b,b+n); //对b递增排序
ans=0;
int lefta=0,leftb=0;
int righta=n-1,rightb=n-1;
while () //比赛直到结束
{
if (a[righta]>b[rightb]) //田忌最快的马比齐威王最快的马快,两者比赛
{
ans+=200;
;
;
}
else if (a[righta] {
ans-=200;
;
;
}
else //田忌最快的马与齐威王最快的马的速度相同
{
if (a[lefta]>b[leftb]) //田忌最慢的马比齐威王最慢的马快,两者比赛
{
ans+=200;
;
;
}
else
{
if (a[lefta] ans-=200;
;
;
}
}
}
}
int main()
{
scanf("%d",&n);
for (int i=0;i scanf("%d",&a[i]);
for (int j=0;j scanf("%d",&b[j]);
solve();
printf("%d\n",ans);
return 0;
}

```

### 输入样例:

第一行正整数n(n≤1000)马的数量,后两行分别是n个整数,表示田忌和齐威王的马的速度值。

```in
3
92 83 71
95 87 74
```

### 输出样例:

每个测试用例输出一行,表示田忌获得的最多银币数。

```out
200
```






答案:
第1空:lefta<=righta

第2空:righta--

第3空:rightb--

第4空:lefta++

第5空:rightb--

第6空:lefta++

第7空:leftb++

第8空:lefta++

第9空:rightb--

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。