绿色出行(green)

绿色出行(green):为了保护环境,倡导“绿色出行”,小L每天都乘公共汽车上、下学。
WH城市的公共汽车很特别,没有一辆公共汽车行驶超过10公里(但都是行驶整数公
里),所有街道在每公里处都有一个公共汽车站。一位顾客打算乘坐公共汽车行驶x公
里,他可以通过多次的换乘车来完成他的旅程,顾客每次换乘车都根据他所乘坐的公
里数来付费。小L的家和学校都恰好在公共汽车站处,相距n公里。小L是学生,在保护环境的同时当然忠要节省,他在想怎样换乘公共汽车,使得行驶n公里乘坐公共汽车的总费用最少。
第一行十个整数分别表示行走1到10公里的费用(费用≤500)。注意这些数并无实际的经济意义,即行驶10公里费用可能比行驶1公里的少。
第二行一个整数n表示,表示小L要乘坐的总路程数。
Output
仅一行包含一个整数,表示最少的费用。1sns100。
Sample Input
12 21 31 40 49 58 69 79 90 101
15
Sample Output
147
Sample Exp lanation
动态规划


#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int INF = 0x3f3f3f3f;

int main() {
    int cost[10]; // 存储行驶1到10公里的费用
    int n; // 总路程数
    int dp[1005]; // dp数组,dp[i]表示行驶i公里的最小花费
    memset(dp, INF, sizeof(dp)); // 初始化为最大值,表示不可达

    for (int i = 0; i < 10; i++) {
        cin >> cost[i];
    }
    cin >> n;

    dp[0] = 0; // 起点为0公里,花费为0

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= 10 && j <= i; j++) { // 从1到10公里选择一个乘车距离
            dp[i] = min(dp[i], dp[i-j] + cost[j-1]); // 转移方程
        }
    }

    cout << dp[n] << endl; // 输出结果

    return 0;
}