猴子與香蕉

2021-07-25 07:58:21 字數 1495 閱讀 1947

【題目描述】

一組研究人員正在設計乙個測試猴子iq的實驗。他們把香蕉吊在屋頂上,同時給猴子提供了磚塊。如果猴子夠聰明,它會把磚塊乙個個疊起來做成乙個塔,然後爬上去拿到自己喜愛的食物。

研究人員有n種不同的磚塊,而且每種磚塊都是取之不盡的。每種磚塊都是長方體,第i種磚塊的大小是(xi,yi,zi)。磚塊能夠翻轉,可以將任意兩邊當作底面,剩下的那邊作為高。

他們想確定用磚塊搭成的最高塔,能否幫助猴子夠著屋頂。問題是,在疊塔過程中,要放的那塊磚,其底面兩條邊都要小於下面那塊磚的兩條邊,這是為了留個空間給猴子踩腳。

例如,底面相同尺寸的磚塊不能相疊。

現給定磚塊,請計算猴子能夠疊塔的最大高度。

【輸入格式】

輸入包含多組測試資料。每組輸入的第一行是乙個整數n,表示磚塊的種類數。n的最大值是30。

接著n行,每行輸入三個整數xi,yi和zi。

當n=0時,輸入結束。

【輸出格式】

對於每組輸入,輸出一行:測試例編號case(從1開始編號),塔能夠達到的最大高度height。

輸出格式為:「case case: maximum height = height」。

【樣例輸入】

1 10 20 30

2 6 8 10

5 5 5

7 1 1 1

2 2 2

3 3 3

4 4 4

5 5 5

6 6 6

7 7 7

5 31 41 59

26 53 58

97 93 23

84 62 64

33 83 27

0 【樣例輸出】

case 1: maximum height = 40

case 2: maximum height = 21

case 3: maximum height = 28

case 4: maximum height = 342

【分析】

不難看出,說是有無限的磚塊,實際上最多只能用1種。

又因為磚塊要按遞增順序排列,所以將所有磚塊排序,然後就是求lis了。

注意,磚塊可以任意旋轉,所以乙個磚塊相當於六個。

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct tile re[1001];

int f[1001];

bool cmp(tile a,tile b)

return a.l>b.l;

}int main()

sort(re+1,re+cas+1,cmp);

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

return

0;}

1134 猴子與香蕉 dp

一組研究人員正在設計乙個測試猴子iq的實驗。他們把香蕉吊在屋頂上,同時給猴子提供了磚塊。如果猴子夠聰明,它會把磚塊乙個個疊起來做成乙個塔,然後爬上去拿到自己喜愛的食物。研究人員有n種不同的磚塊,而且每種磚塊都是取之不盡的。每種磚塊都是長方體,第i種磚塊的大小是 xi,yi,zi 磚塊能夠翻轉,可以將...

dp專題 猴子與香蕉

猴子與香蕉 題目描述 一組研究人員正在設計乙個測試猴子iq的實驗。他們把香蕉吊在屋頂上,同時給猴子提供了磚塊。如果猴子夠聰明,它會把磚塊乙個個疊起來做成乙個塔,然後爬上去拿到自己喜愛的食物。研究人員有n種不同的磚塊,而且每種磚塊都是取之不盡的。每種磚塊都是長方體,第i種磚塊的大小是 xi,yi,zi...

猴子摘香蕉

房內有乙個猴子,乙個箱子,天花板掛了一串香蕉,其位置如圖所示。猴子為了拿到香蕉,它必須把箱子搬到香蕉下面,然後再爬到箱子上。請定義必要的謂詞,列出問題的初始化狀態 即下圖所示狀態 目標狀態 猴子拿到了香蕉,站在箱子上,箱子位於位置b 1 定義描述環境狀態的謂詞 at x,y x在y處 x y hol...