poj1042 黑書第一道貪心題

2021-09-06 09:38:45 字數 1882 閱讀 6383

題意就不說了,主要講講思路以及注意的地方。

思路:是按黑書上給出的思路編的,主要是貪心+列舉。因為每個池塘只能走一次,可以列舉前1,2,3,.....n個池塘之間所能釣的最大魚數。我們可以將路程一次性處理完畢,這樣就可以瞬移......每次瞬移到魚最多的池塘釣魚就好。有點遺憾,他們說可以用dp做,想了許久,沒想明白dp怎麼做

注意:這道題目思路很簡單,倒是細節處理很麻煩,我因為沒有想到乙個池塘裡面的魚還可以為負數,就貢獻了6次wa.......

還得注意:所有池塘魚為0;不需要走路就可以到下乙個池塘;在某種狀態下,這乙個狀態的最大魚數等於前面的狀態中的最大魚數,這時候要考慮這種狀態下是否有某乙個池塘的編號小於前乙個池塘或者,是不是同一編號下,這種狀態下的那個池塘比前面狀態下魚數要大......可能沒有說清楚,具體看**

1:釣魚次數大於0才進去迴圈,而不是!=0時

2:當每次求得的sum和最終結果ans相比時,大於ans直接複製,如果等於的話則一定要比較哪個結果中編號小的池塘呆的時間多。

3:當魚的數目為負數時,直接將數目變成0,而不是負數(沒想通為什麼,但如果是負數就是不ac,寫完這個我再好好研究下)

4:如果你是用排序的方法確定當前的最大值,最好自己寫乙個排序演算法,因為你必須保證當前選的池塘的魚的數目不僅是最多的,而且池塘的編號也要是最小的!!!直接用排序演算法模板相當危險,我把插入排序改進了,重點是可能有很多值相等的情況,你必須保證你選擇的池塘是編號最小的。雖說你可以每次從頭搜尋,找乙個最大的,但會超時。

5:最終結果ans的初值應該是負數,因為很可能、不,是就是會有最終結果為0的情況,所以利用if(sum>ans)判斷結果時,ans的初值要是負數

6:資料很**很無恥,有di[i]=0的情況,魚的數目不會減少;也有時間等於0的情況;顯然也有f[i],t[i]=0的情況,好好想想是否都考慮到了,用資料測試一下就好了

7:輸出格式算是個小問題吧,記得有兩個回車,最後乙個池塘木有逗號。

**:

1 #include2 #include3 #include

4 #include5

using

namespace

std;

6structss7

17int

num,sum,d;

18};

19struct

20s[50

];23

int a[50],b[50],t[50

];24

intmain()

2539

for(int i=1;i<=n;i++)

40 scanf("

%d",&s[i].d);

41 t[0]=t[1]=0;42

for(int i=2;i<=n;i++)

43 scanf("

%d",&t[i]);

44for(int i=1;i<=n;i++)

4560

while(!q.empty()&&ht>0)61

72}73if(tol1>=tol)

7484}85

else

8699

}100

}101

}102

}103

for(int i=1;i)

104 printf("

%d,

",a[i]*5

);105 printf("

%d\n

",a[n]*5

);106 printf("

number of fish expected: %d\n\n

",tol);

107}

108return0;

109 }

課堂第一道題

includevoid funstr char str1 main void funstr char str1 printf n printf s hello world hello world hwhello world hello world process exited after 4.466...

一道貪心題 HDU 1052

本題故事是由田忌賽馬引起的,但是什麼田忌賽馬的我是不管咯啊。廢話不多說,先把題目大概意思講一下 路人甲和路人乙各有n匹馬,現在給出了這些馬的速度,如何匹配這些馬兒使得路人甲獲得最大利益?ps 贏一場得200積分,輸一場減去200積分,平局不增不減 分析 這題目是我在題目分類中看到的一道貪心題。我們可...

一道字串貪心題

dna序列 dna.c cpp in out 時間限制 2s 空間限制 2g 題目描述 2018年10月,mit建立了最新的奈米科技研究中心mit.nano。此後,不斷有新的研究成果在此產生。有一天,研究者發現了一種新的生物,這種生物的基因中含有 條dna序列,每一條都有一定的長度,科學家們可以將每...