題目描述:
已知乙個 n 枚郵票的面值集合(如,)和乙個上限 k —— 表示信封上能夠貼 k 張郵票。計算從 1 到 m 的最大連續可貼出的郵資。
例如,假設有 1 分和 3 分的郵票;你最多可以貼 5 張郵票。很容易貼出 1 到 5 分的郵資(用 1 分郵票貼就行了),接下來的郵資也不難:
6 = 3 + 3
7 = 3 + 3 + 1
8 = 3 + 3 + 1 + 1
9 = 3 + 3 + 3
10 = 3 + 3 + 3 + 1
11 = 3 + 3 + 3 + 1 + 1
12 = 3 + 3 + 3 + 3
13 = 3 + 3 + 3 + 3 + 1
然而,使用 5 枚 1 分或者 3 分的郵票根本不可能貼出 14 分的郵資。因此,對於這兩種郵票的集合和上限 k=5,答案是 m=13。
輸入:第 1 行: 兩個整數,k 和 n。k(1 <= k <= 200)是可用的郵票總數。n(1 <= n <= 50)是郵票面值的數量。
第 2 行至末尾: n 個整數,每行 15 個,列出所有的 n 個郵票的面值,面值不超過 10000。
輸出:
乙個整數,從 1 分開始連續的可用集合中不多於 k 張郵票貼出的郵資數。
樣例輸入:
5 21 3
樣例輸出:13
分析:
1.資料分析:每個信封最多貼k(k<=200)張郵票,每張郵票的面值不超過10000,能貼出最大的郵資不超過2000000,可用乙個陣列來表示能夠表示貼出每種郵資。
2.演算法分析:
(1)搜尋:每種郵票最多貼200張,總共50種,樸素的深搜規模將達到50^200。
(2)動態規劃:
<1>階段:能夠構成每個面值為階段。比如能構成的面值為1到v,那麼總共為v個階段。
<2>狀態:dp[i]表示構成面值i所需要的最少郵票數.
<3>決策:對於樣例資料1和3兩種面值的郵票:
構成郵資0:所需要郵票張數為0張,dp[0]=0;
構成郵資1:只能用1分的郵票,所需要郵票張數1張,dp[1]=1;
構成郵資2:只能用1分的郵票,所需要郵票張數2張,dp[2]=1;
構成郵資3:
*1.若選擇使用一張1分的郵票,dp[3]=dp[2]+1=3………dp[3-1]+1
*2.若選擇使用一張3分的郵票,dp[3]=dp[0]+1=1………dp[3-3]+1
dp[3]=min=1;
構成郵資4:
*1.若選擇使用一張1分的郵票,dp[4]=dp[3]+1=2………dp[3-1]+1
*2.若選擇使用一張3分的郵票,dp[4]=dp[1]+1=1………dp[3-3]+1
dp[4]=min=2;
<4>狀態轉移方程:dp[i]=min i>=a[j] 1<=j<=n f[i]<=k;
/*
you should use the sta***ard input/output
in order to receive a score properly.
do not use file input and output
please be very careful.
*/#include #include using namespace std;
int answer;
int dp[2000001];
int main(int argc, char** argv)
sort(a, (a + n));
dp[0] = 0;
while (dp[answer] <= k)
}// print the answer to standard output(screen).
cout << "case #" << test_case + 1 << endl;
cout << answer << endl;
deletea;
} return 0;//your program should return 0 on normal termination.
}
演算法 動態規劃問題
一 什麼是動態規劃?動態規劃 dynamic programming 是 運籌學的乙個分支,是求解決策過程 decision process 最優化的數學方法。20世紀50年代初 美國數學家r.e.bellman等人在研究多階段決策過程 multistep decision process 的優化問...
演算法 硬幣問題(動態規劃)
name 硬幣問題 動態規劃 actor ht time 2015年7月20日 error reporte 1.不能得到答案時的限定。該題目中初始化,以及每次迴圈初形態要注意判斷 include stdio.h include conio.h include string.h define n 5 ...
演算法設計 動態規劃問題
適合採用動態規劃 dynamic programming 方法的最優化問題中的兩個要素 最優子結構和重疊子問題。最優子結構 用動態規劃求解最優化問題的第一步就是刻畫最優解的結構,如果乙個問題的解結構包含其子問題的最優解,就稱此問題具有最優子結構性質。因此,某個問題是否適合應用動態規劃演算法,它是否具...