题目:最小乘车费用

题目描述

假设某条街上每一公里就有一个公共汽车站,并且乘车费用如下表:
公里数 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公里的费用,相邻两数间用一个空格隔开;第二行为某人想要行驶的公里数(<=100)。

输出格式

仅一行,包含一个整数,表示行使这么远所需要的最小费用。

 

 

 

题解:

以前没看懂题意,今天看懂了。一条路上有很多汽车站,有个人吃了饭没事干,硬要坐车,让车载他n公里,但同一辆车不能开超过10公里。

可得动归方程:f[i]=min(f[i-j]+a[j])  (0<=j<=10)

代码实现:

#include<iostream>
#include<cstring>
using namespace std;

int a[11],f[101],n;

int main()
{
    int i,j;
    for(i=1;i<=10;i++)
    cin>>a[i];cin>>n;
    
    for(i=1;i<=n;i++) f[i]=0xfffffff;
    
    f[0]=0;
    for(i=1;i<=n;i++)
    for(j=i-1;j>=0&&j>=i-10;j--)
    if(f[i]>f[j]+a[i-j])
    f[i]=f[j]+a[i-j];
    
    cout<<f[n]<<endl;
    
    return 0;
    
    }  
posted on 2012-01-16 22:51  怡红公子  阅读(1556)  评论(0编辑  收藏  举报