题目:最小乘车费用
题目描述
假设某条街上每一公里就有一个公共汽车站,并且乘车费用如下表:
公里数 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; }