求解釣魚問題

2021-10-11 01:31:31 字數 1568 閱讀 4746

這個問題比較有韻味,可以好好體會以下!!!

問題描述:

某人想在h小時內釣到數量最多的魚。這時他已經在一條路邊,從他所在的地方開始,放眼望去,n個湖一字排開,湖編號依次是1.2…n。他已經知道,從湖i走到湖i+1需要花5*ti分鐘;他在湖i釣魚,第乙個5分鐘可釣到數量為fi的魚,若他繼續在湖i釣魚,每過5分鐘,釣魚量將減少di。

請給他設計乙個最佳釣魚方案。

解決思想:

解決思想有一些貪心的思想,但主要還是暴力列舉

用lake[i]記錄以第 i 個湖結尾的方案,

lake中為結構體,記錄以此方案結尾所能獲得的最大魚數目:max,

以及用num[i]記錄從1~i釣魚,所待的時間

中心思想:先假設從湖1走到湖i,在這個前提下計算出在湖k所待的時間,然後在此基礎上求解最大釣魚數目

**中有非常詳細的注釋!!!

樣例:

2

1初始每個湖魚的個數:10 1

乙個時間間隔,魚減少的個數:2 5

最佳方案:

釣魚總數目:31

**:

#includeusing namespace std;

#define max 20

int n; //湖的個數

int h; // 時間

int max_values=0; //記錄活得最大魚的數目 的方案,是以角標i結尾的

int ti[max]; //i~i+1花費時間

int fi[max]; //初始每個湖魚個數

int cfi[max]; //記錄更新後每個湖魚的個數

int di[max]; //間隔五分鐘,魚減少的數目

//記錄方案 ——以i結尾的湖_方案

struct nodetypelake[max];

//得到最大角標

int getmax(int a,int i,int j)

} return max_index;

} //求解方案函式

void solve()

else

t+=5;

} } }

//主函式

int main()

} for(int i=1;i>ti[i];

} cout<<"初始每個湖魚的個數:";

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

cout<<"乙個時間間隔,魚減少的個數:";

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

//呼叫求解函式

solve();

//列印

cout<<"最佳方案:"} cout<<"釣魚總數目:"

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

return 0;

}

問題 A 迷宮求解問題

時間限制 10 sec 記憶體限制 2048 mb 提交 574 解決 306 提交 狀態 討論版 用乙個m n的矩陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設計乙個程式,對給定的迷宮,求出找到的第一條從入口到出口的通路,或得到沒有通路的結論。我們指定 1 迷宮的入口為矩陣的左上角 1,1 迷宮...

約瑟夫問題求解

終於又到了大名鼎鼎的約瑟夫問題了。約瑟夫問題也算是近代比較知名的乙個演算法問題了,有著成熟的演算法,其中有著強行模擬,還存在著一些神奇的數學方法,哈哈。今天我又來了強行模擬。啊,啊,啊。瞎。下面是問題的描述 題目描述 description 乙個旅行社要從n名旅客中選出一名幸運旅客,為他提供免費環球...

ThreeSum問題求解

問題描述 乙個包含n個元素的陣列,在其中選出3個元素 a,b,c 能否使得三個元素之和等於0.問題擴充套件 1.當三個元素可以重複時,例如 int a 此時可以選擇 1,1,2,即三個元素可以包含重複的元素。2.當三個元素不能包含重複的元素的時候,例如 int a 此時不能選擇 1,1,2 因為 1...