Problem 上樓梯(倉庫的架子)

2021-09-30 13:56:16 字數 1217 閱讀 5074

description

倉庫裡有乙個c列(column)r行(row)的放物品的架子。為了能拿到任意格仔裡的物品,必須使用乙個梯子。每次梯

子只能靠在一列上,這時可以拿這列和它相鄰的兩列的物品,但只能拿你爬到的高度以下的所有格仔中物品(包括

爬到的高度)。現在你知道今天將要拿的一些物品的位置(行、列),但為了減少危險,想盡可能少爬梯子,即爬

梯子的總高度和最小。程式設計求出完成今天任務後,所需爬梯子的最小可能的高度和。

input

輸入檔案第一行有兩個被空格分隔的整數c 和 r, 1 ≤ c ≤ 100, 1 ≤ r ≤ 100,分別表示列數和行數。

輸入檔案第二行只有乙個整數n, 1 ≤ n ≤ 100,需要拿的物品的數量。

接下面的n行,每行有2個整數a和b,1 ≤ a ≤ c, 1 ≤ b ≤ r,表示你拿物品的位置。

output

輸出檔案只一行,你拿到所有物品後的可能最少爬梯子的高度和。

sample input

5 5

3 2 3

3 4

4 4

sample output

4這道題一看就知道是dp

看看程式,有注釋。。。

#include

#include

using

namespace

std;

int n,r,c,f[105],h[105],temp,a[105],b[105];

int main()

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

f[i]=f[i-1]+h[i];//現在的這一列可以由上一列轉移過來,加上當時的h【i】的高度;

if(i==1) continue;//如果當前的狀態為第乙個,直接退出,

temp=f[i-2]+max(h[i],h[i-1]);//不同的考慮方案,如果拿左右兩邊的,哪一次拿的最小;

f[i]=min(temp,f[i]);//找到到現在最小的值然後保留,

if(i==2) continue;//同理

temp=f[i-3]+max(h[i],max(h[i-1],h[i-2]));//把既往左取又往右取變成往左取2個

//因為既往左取又往右取可能會重複

f[i]=min(temp,f[i]);

}printf("%d",f[c]);

}

上樓梯 動態規劃

題目 題目描述 有個小孩正在上樓梯,樓梯有n階台階,小孩一次可以上1階 2階 3階。請實現乙個方法,計算小孩有多少種上樓的方式。為了防止溢位,請將結果mod 1000000007 給定乙個正整數int n,請返回乙個數,代表上樓的方式數。保證n小於等於100000。測試樣例 返回 1 解題思路 這題...

上樓梯 動態規劃

題目 題目描述 有個小孩正在上樓梯,樓梯有n階台階,小孩一次可以上1階 2階 3階。請實現乙個方法,計算小孩有多少種上樓的方式。為了防止溢位,請將結果mod 1000000007 給定乙個正整數int n,請返回乙個數,代表上樓的方式數。保證n小於等於100000。測試樣例 返回 1 解題思路 這題...

上樓梯問題 棧

這樣說可能有些費解,尤其對於初學者來說,接觸這道題的時間可能還未觸及資料結構的層次,或者有所耳聞,但是卻沒有沒法有足夠的模擬和抽象化的能力理解棧是怎樣執行的,那麼我們就從這道題開始,盡量讓你用一道題就掌握棧這個資料結構 有n級的台階,你一開始在底部,每次可以向上邁最多k級台階 最少1級 問到達第n級...