hdu1052 Tian Ji -- The Horse Racing
?????? 剛開始做這道題的時(shí)候,考慮不夠周全,一直沒(méi)做出來(lái),然后在看了discuss與別人的博客有才意識(shí)到自己考慮不周全。
??????這道田忌賽馬問(wèn)題,是一個(gè)涉及貪心算法的題目。雖然還沒(méi)學(xué)貪心算法,但是參考別人的思路后對(duì)這道題的解題思路已經(jīng)較為清晰了,下面就來(lái)說(shuō)一下本題的解題思路吧。
???????1、 當(dāng)然要對(duì)馬的速度進(jìn)行一個(gè)排序,讓田忌與齊王的馬都從大到小進(jìn)行排序(當(dāng)然你也可以從小到大)
?????? 2、 然后將齊王的馬與田忌的進(jìn)行比較,有以下幾種情況:
????????(1)田忌最快的馬,比齊王最快的馬還快,當(dāng)然這種情況直接就用田忌最快的馬來(lái)贏齊王的最快的馬
????????(2)田忌最快的馬,比齊王最快的馬慢,這種情況用田忌最慢的馬去與齊王最快的馬比賽,以達(dá)到最優(yōu)解
????????(3)田忌最快的馬與齊王最快的馬一樣快
????????????此時(shí),拿最慢的馬進(jìn)行比較:
????????????如果田忌最慢的馬比齊王最慢的馬速度快,那就直接贏了它。 否則就用田忌最慢的馬與齊王最快的馬進(jìn)行比較
?這里提供一組數(shù)據(jù),這組數(shù)據(jù)能通過(guò)的話基本就能過(guò)了:
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; }
?
總結(jié)
以上是生活随笔為你收集整理的hdu1052 Tian Ji -- The Horse Racing的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: GIF修复(图片隐写)
- 下一篇: fullPage 实现全屏滚动