DP(一)——郵票個數的統計
本題是一道相當典型的動態規劃題目,值得一看。
題目:http://acm.swust.edu.cn/oj/problem/0251/
我們用dp[i]線性數組來表示郵票的個數,
dp[i]中的i就表示達到的面值了。
也就是說當達到面值i的時候要用到dp[i]張郵票。
當然,i要從1開始,這樣就有了dp[1],這個過程是為了
dp[2]做的鋪墊,可以說這就是動態規劃的精髓了。
View Code
#include "iostream"
using namespace std;
#define INF 0x7ffffff
#define size 2000001
int dp[size];
int main()
{
int k, n, vlaue[51], i, j;
cin>>k>>n;
for(i=0; i<n; i++) cin>>vlaue[i];
dp[0] = 0;
for(i=1; i<size; i++)
{
dp[i] = INF;
for(j=0; j<n; j++)
if(vlaue[j]<=i) dp[i]=min(dp[i], dp[i-vlaue[j]]+1); //i就是要實現的面值,只有當dp[i-value[j]]已經被鋪墊之后,dp[]才會結束。
if(dp[i]>k) break;
}
cout<<i-1<<endl;
return 0;
}
posted on 2011-10-29 21:44 More study needed. 閱讀(306) 評論(0) 收藏 舉報

浙公網安備 33010602011771號