1261 採藥 第乙個成功的動態規劃題

2021-08-21 12:14:55 字數 4318 閱讀 2602

其實這個成功確實有點水,很多地方都有點一知半解的意味.不管,這篇文章也許還要改吧.

原題:

description

辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到乙個到處都是草藥的山洞裡對他說:「孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給你一段時間,在這段時間裡,你可以採到一些草藥。如果你是乙個聰明的孩子,你應該可以讓採到的草藥的總價值最大。」

如果你是辰辰,你能完成這個任務嗎?

input

輸入檔案medic.in的第一行有兩個整數t(1 <= t <= 1000)和m(1 <= m <= 100),用乙個空格隔開,t代表總共能夠用來採藥的時間,m代表山洞裡的草藥的數目。接下來的m行每行包括兩個在1到100之間(包括1和100)的整數,分別表示採摘某株草藥的時間和這株草藥的價值。

output

輸出檔案medic.out包括一行,這一行只包含乙個整數,表示在規定的時間內,可以採到的草藥的最大總價值。

sample input

70 3

71 100

69 1

1 2

sample output

3hint

對於30%的資料,m <= 10;

對於全部的資料,m <= 100

**:

#include

inttime[1000],val[1000],value[1000];

int main()}}

printf("%d\n",value[t]);

}

思路:這個**主要借鑑了另乙個別人的**的思路.主要思路是對於每種藥進行一次迴圈,然後這次迴圈中計算出對於這種藥在多少時間時能獲得多少的最大價值.然後如此不斷迴圈,最後得到的最後一項即是在t時間能獲得的最大價值.

具體分析:

70 3

71 100

69 1

1 2

將value[70]=0設為val[1]+value[1]=1

將value[69]=0設為val[1]+value[0]=1

將value[70]=1設為val[2]+value[69]=3

將value[69]=1設為val[2]+value[68]=2

將value[68]=0設為val[2]+value[67]=2

將value[67]=0設為val[2]+value[66]=2

將value[66]=0設為val[2]+value[65]=2

將value[65]=0設為val[2]+value[64]=2

將value[64]=0設為val[2]+value[63]=2

將value[63]=0設為val[2]+value[62]=2

將value[62]=0設為val[2]+value[61]=2

將value[61]=0設為val[2]+value[60]=2

將value[60]=0設為val[2]+value[59]=2

將value[59]=0設為val[2]+value[58]=2

將value[58]=0設為val[2]+value[57]=2

將value[57]=0設為val[2]+value[56]=2

將value[56]=0設為val[2]+value[55]=2

將value[55]=0設為val[2]+value[54]=2

將value[54]=0設為val[2]+value[53]=2

將value[53]=0設為val[2]+value[52]=2

將value[52]=0設為val[2]+value[51]=2

將value[51]=0設為val[2]+value[50]=2

將value[50]=0設為val[2]+value[49]=2

將value[49]=0設為val[2]+value[48]=2

將value[48]=0設為val[2]+value[47]=2

將value[47]=0設為val[2]+value[46]=2

將value[46]=0設為val[2]+value[45]=2

將value[45]=0設為val[2]+value[44]=2

將value[44]=0設為val[2]+value[43]=2

將value[43]=0設為val[2]+value[42]=2

將value[42]=0設為val[2]+value[41]=2

將value[41]=0設為val[2]+value[40]=2

將value[40]=0設為val[2]+value[39]=2

將value[39]=0設為val[2]+value[38]=2

將value[38]=0設為val[2]+value[37]=2

將value[37]=0設為val[2]+value[36]=2

將value[36]=0設為val[2]+value[35]=2

將value[35]=0設為val[2]+value[34]=2

將value[34]=0設為val[2]+value[33]=2

將value[33]=0設為val[2]+value[32]=2

將value[32]=0設為val[2]+value[31]=2

將value[31]=0設為val[2]+value[30]=2

將value[30]=0設為val[2]+value[29]=2

將value[29]=0設為val[2]+value[28]=2

將value[28]=0設為val[2]+value[27]=2

將value[27]=0設為val[2]+value[26]=2

將value[26]=0設為val[2]+value[25]=2

將value[25]=0設為val[2]+value[24]=2

將value[24]=0設為val[2]+value[23]=2

將value[23]=0設為val[2]+value[22]=2

將value[22]=0設為val[2]+value[21]=2

將value[21]=0設為val[2]+value[20]=2

將value[20]=0設為val[2]+value[19]=2

將value[19]=0設為val[2]+value[18]=2

將value[18]=0設為val[2]+value[17]=2

將value[17]=0設為val[2]+value[16]=2

將value[16]=0設為val[2]+value[15]=2

將value[15]=0設為val[2]+value[14]=2

將value[14]=0設為val[2]+value[13]=2

將value[13]=0設為val[2]+value[12]=2

將value[12]=0設為val[2]+value[11]=2

將value[11]=0設為val[2]+value[10]=2

將value[10]=0設為val[2]+value[9]=2

將value[9]=0設為val[2]+value[8]=2

將value[8]=0設為val[2]+value[7]=2

將value[7]=0設為val[2]+value[6]=2

將value[6]=0設為val[2]+value[5]=2

將value[5]=0設為val[2]+value[4]=2

將value[4]=0設為val[2]+value[3]=2

將value[3]=0設為val[2]+value[2]=2

將value[2]=0設為val[2]+value[1]=2

將value[1]=0設為val[2]+value[0]=2

3

完整的輸入,迴圈中的賦值過程.從中可以看出其執行的具體過程:先在第一次中,判斷出對於藥0可能的時間點:沒有;第二次判斷出對於藥1可能的時間點:70和69,將其設定為藥1的價值.第三次判斷藥2時發現:對於時間點70,若除去藥2的時間i=1,剩下的時間所對應的最大價值會大於現在可能的最大價值,故將當前點的價值設為2的價值+1的價值.下文同理進行運算.最後在value[時間最大時]得到的就是最大可能價值.

也許我說的也不一定對吧…僅代表個人看法.

第乙個軟體的成功

2004年12月10日終於完成了屬於我和侵室哥們的第乙個作品 進銷存管理系統 這個小軟 件我們用了一周的時間才開發成功。為了這個小軟體我們哥幾個三個黑夜都沒有合上眼睛,在這 時,我真正的體會到了程式設計的樂趣,也領會到了程式設計時的困難,但我們沒有被重重困難所屈服,最終 做出了乙個屬於我們的第乙個軟...

菜鳥成功修改的第乙個程式

曾經有乙個程式,橫在我的面前,我沒有辦法搞定它,它就是 來自 彙編通訊 第一期裡的乙個程式。無論怎麼弄,總是說 應用程式錯誤 用win32da 也查不出問題所在。在訊息框裡顯示al中的數值 386 model flat,stdcall option casemap none include wind...

Linux第乙個動態庫

動態庫一般以.so結尾,就是shared object的意思.其基本生成步驟為 編寫函式 編譯生成動態庫檔案,要加上 shared 和 fpic 選項 庫檔名以lib開頭,以.so 結尾。fpic 使輸出的物件模組是按照可重定位位址方式生成的。shared指定把對應的原始檔生成對應的動態鏈結庫檔案l...