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級...