青少年编程知识记录 codecoming

【题解】公路乘车(动态规划)

【题目描述】

一个特别的单行街道在每公里处有一个汽车站。顾客根据他们乘坐汽车的公里使来付费。例如下表就是一个费用的单子。   没有一辆车子行驶超过10公里,一个顾客打算行驶n公里(1< =n< =100),它可以通过无限次的换车来完成旅程。最后要求费用最少。

【输入描述】

  第一行十个整数分别表示行走1到10公里的费用(< =500)。注意这些数并无实际的经济意义,即行驶10公里费用可能比行驶一公里少。         第二行一个整数n表示,旅客的总路程数。

【输出描述】

仅一个整数表示最少费用。

【样例输入】

12 21 31 40 49 58 69 79 90 101  15

【样例输出】

147



【参考答案】

#include<bits/stdc++.h>  using namespace std;  #define max INT_MAX;  int dp[10];  int minn(int a,int b)  {      if(a<=b) return a;      else return b;  }  int main(void)  {      int va[10];   //费用数组      for(int i=0;i<10;i++) cin>>va[i];      int num;      cin>>num;      dp[0]=va[0];  //初始值:走一公里最少费用没有其他可能      for(int i=1;i<num;i++)      {          dp[i]=max;          for(int j=1,n=i;j<=10&&n>=0;j++,n--)//对于每个路程的最少费用          {         //即为该路程之前的十个公里数的费用加上到该路程的费用的最小值              dp[i]=minn(dp[i-j]+va[j-1],dp[i]);          }      }      cout<<dp[num-1];      return 0;  }



(adsbygoogle = window.adsbygoogle || []).push({});

标签: 动态规划

作者:亿万年的星光 分类:题解目录 浏览: