耗時3節課 充分體現出粗心釀成大錯這個道理 1開始1直不知道為何數組越界 原來是minn和ninj寫反了 后來又由于讀入函數出問題 反復調試 今后1定要注意
題目還是放上吧:
年輕的探險家來到了1個印第安部落里。在那里他和酋長的女兒相愛了,因而便向酋長去求親。酋長要他用10000個金幣作為聘礼才答應把女兒嫁給他。探險家拿不出這么多金幣,便要求酋長下降要求。酋長說:“嗯,如果你能夠替我弄到大祭司的皮襖,我可以只要8000金幣。如果你能夠弄來他的水晶球,那末只要5000金幣就好了。”探險家就跑到大祭司那里,向他要求皮襖或水晶球,大祭司要他用金幣來換,或替他弄來其他的東西,他可以下降價格。探險家因而又跑到其他地方,其他人也提出了類似的要求,或直接用金幣換,或找到其他東西就能夠下降價格。不過探險家沒必要用多樣東西去換1樣東西,由于不會得到更低的價格。探險家現在很需要你的幫忙,讓他用最少的金幣娶到自己的心上人。另外他要告知你的是,在這個部落里,等級觀念10分森嚴。地位差距超過1定限制的兩個人之間不會進行任何情勢的直接接觸,包括交易。他是1個外來人,所以可以不受這些限制。但是如果他和某個地位較低的人進行了交易,地位較高的的人不會再和他交易,他們認為這樣等因而間接接觸,反過來也1樣。因此你需要在斟酌所有的情況以后給他提供1個最好的方案。
為了方便起見,我們把所有的物品從1開始進行編號,酋長的承諾也看做1個物品,并且編號總是1。每一個物品都有對應的價格P,主人的地位等級L,和1系列的替換品Ti和該替換品所對應的“優惠”Vi。如果兩人地位等級差距超過了M,就不能“間接交易”。你必須根據這些數據來計算出探險家最少需要多少金幣才能娶到酋長的女兒。
輸入包括了多個測試數據。每一個測試數據的第1行是兩個整數M,N(1<=N<=100),順次表示地位等級差距限制和物品的總數。接下來依照編號從小到大順次給出了N個物品的描寫。每一個物品的描寫開頭是3個非負整數P、L、X(X<N),順次表示該物品的價格、主人的地位等級和替換品總數。接下來X行每行包括兩個整數T和V,分別表示替換品的編號和“優惠價格”。
對每一個測試數據,在單唯一行內輸出最少需要的金幣數。
1 4
10000 3 2 //酋長的承諾
2 8000
3 5000
1000 2 1 //大祭司的皮襖
4 200
3000 2 1 //大祭司的水晶球
4 200
50 2 0 // 其他某件物品
5250
方便大家理解,畫了1張很低劣的圖,大家湊活看1下
代碼放上:
在這里還要特別說明1下大整數常量的定義
const
int
maxn=0x3f3f3f3f;
這真是極好的存在= =援用1下1篇已消失的博文的解釋(順便吐槽域名重定向去了甚么鬼地方):
0x3f3f3f3f的10進制是1061109567,也就是10^9級別的(和0x7fffffff1個數量級),而1般場合下的數據都是小于10^9的,所以它可以作為無窮大使用而不致出現數據大于無窮大的情形。
另外一方面,由于1般的數據都不會大于10^9,所以當我們把無窮大加上1個數據時,它其實不會溢出(這就滿足了“無窮大加1個有窮的數仍然是無窮大”),事實上0x3f3f3f3f+0x3f3f3f3f=2122219134,這非常大但卻沒有超過32-bit int的表示范圍,所以0x3f3f3f3f還滿足了我們“無窮大加無窮大還是無窮大”的需求。
最后,0x3f3f3f3f還能給我們帶來1個意想不到的額外好處:如果我們想要將某個數組清零,我們通常會使用memset(a,0,sizeof(a))這樣的代碼來實現(方便而高效),但是當我們想將某個數組全部賦值為無窮大時(例如解決圖論問題時鄰接矩陣的初始化),就不能使用memset函數而得自己寫循環了(寫這些不重要的代碼真的很痛苦),我們知道這是由于memset是按字節操作的,它能夠對數組清零是由于0的每一個字節都是0,現在好了,如果我們將無窮大設為0x3f3f3f3f,那末奇跡就產生了,0x3f3f3f3f的每一個字節都是0x3f!所以要把1段內存全部置為無窮大,我們只需要memset(a,0x3f,sizeof(a))。
所以在通常的場合下,0x3f3f3f3f真的是1個非常棒的選擇。
總結起來就是3句話
1 夠大,1般這么大你不會用到
2 夠大但不容易溢出
3 方便數組賦值(如果你用FF會變成負數,符號位也會成1)
1輪開始了,該來的總會來的。
歡迎小花加入C黨大家族,本科同學你現在是1個人了,摸頭???祝小花的喜家家之路1帆風順。
――君子博學而日參省乎己,則知明而行無過矣。
上一篇 計算機指令仿真