1. 程式人生 > >最小乘車費用(dp水題)

最小乘車費用(dp水題)

描述

某條街上每一公里就有一汽車站,乘車費用如下表:

公里數 1 2 3 4 5 6 7 8 9 10 費用 12 21 31 40 49 58 69 79 90 101

而一輛汽車從不行駛超過10公里。某人想行駛n公里,假設他可以任意次換車,請你幫他找到一種乘車方案使費用最小(10公里的費用比1公里小的情況是允許的)。

編一程式算出最小的價格;

輸入

輸入檔案共兩行,第一行為10個不超過200的整數,依次表示行駛1~10公里的費用,相鄰兩數間用空格隔開; 第二行為某人想要行駛的公里數n(n<=1000)。

輸出

輸出檔案僅一行包含一個整數,表示該測試點的最小費用。

輸入樣例 1

12 21 31 40 49 58 69 79 90 101 
15 

輸出樣例 1

147
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;

int f[25],dp[205];
int n;
int main()
{
    memset(dp,127,sizeof(dp));
    for(int i=1; i<=10; i++)
        cin>>f[i];
    cin>>n;
    dp[0]=0;
    dp[1]=f[1];
    for (int i=2; i<=n; i++)
    {
        dp[i]=dp[i-1]+f[1];
        for (int j=1; j<=10 && j<=i; j++)
            dp[i]=min(dp[i],dp[i-j]+f[j]);
        //cout<<dp[i]<<"  ";
    }
    cout<<dp[n]<<endl;

    return 0;
}

在dp問題中外層迴圈為狀態的個數,內層迴圈為可選的方案數。

注意:

如果換了,結果會變成150