hdu1052 Tian Ji -- The Horse Racing
生活随笔
收集整理的這篇文章主要介紹了
hdu1052 Tian Ji -- The Horse Racing
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?????? 剛開始做這道題的時候,考慮不夠周全,一直沒做出來,然后在看了discuss與別人的博客有才意識到自己考慮不周全。
??????這道田忌賽馬問題,是一個涉及貪心算法的題目。雖然還沒學貪心算法,但是參考別人的思路后對這道題的解題思路已經較為清晰了,下面就來說一下本題的解題思路吧。
???????1、 當然要對馬的速度進行一個排序,讓田忌與齊王的馬都從大到小進行排序(當然你也可以從小到大)
?????? 2、 然后將齊王的馬與田忌的進行比較,有以下幾種情況:
????????(1)田忌最快的馬,比齊王最快的馬還快,當然這種情況直接就用田忌最快的馬來贏齊王的最快的馬
????????(2)田忌最快的馬,比齊王最快的馬慢,這種情況用田忌最慢的馬去與齊王最快的馬比賽,以達到最優解
????????(3)田忌最快的馬與齊王最快的馬一樣快
????????????此時,拿最慢的馬進行比較:
????????????如果田忌最慢的馬比齊王最慢的馬速度快,那就直接贏了它。 否則就用田忌最慢的馬與齊王最快的馬進行比較
?這里提供一組數據,這組數據能通過的話基本就能過了:
8
11?9?8?8?8?4?3?2
11?9?8?8?8?4?3?2
(答案800)
?代碼如下:?
#include <stdio.h> #include <stdlib.h> int tian[1001],king[1001],num[1000]; int cmp(const void*a,const void*b){return *(int*)b-*(int*)a; }int main() {int n,i,count;int front,tail,head,rear;while(scanf("%d",&n),n){front=head=0,tail=rear=n-1;count=0;for(i=0;i<n;i++)scanf("%d",&tian[i]);for(i=0;i<n;i++)scanf("%d",&king[i]);qsort(tian,n,sizeof(tian[0]),cmp);qsort(king,n,sizeof(king[0]),cmp);while(front<=rear){if(tian[front]>king[head]){num[front]=head;front++;head++;}else if(tian[front]<king[head]){num[rear]=head;rear--;head++;}else{if(tian[rear]>king[tail]){num[rear]=tail;rear--;tail--;}else{num[rear]=head;head++;rear--;}}}for(i=0;i<n;i++){if(tian[i]>king[num[i]])count++;else if(tian[i]<king[num[i]])count--;}printf("%d\n",200*count);}return 0; }
?
總結
以上是生活随笔為你收集整理的hdu1052 Tian Ji -- The Horse Racing的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GIF修复(图片隐写)
- 下一篇: fullPage 实现全屏滚动